Java tutorial
//package com.java2s; /* * Copyright (c) 2013 Game Salutes. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl.html * * Contributors: * Game Salutes - Repackaging and modifications of original work under University of Chicago and Apache License 2.0 shown below * * Repackaging from edu.uchicago.nsit.iteco.utils to com.gamesalutes.utils * * Copyright 2008 - 2011 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ import java.lang.reflect.Constructor; import java.util.*; public class Main { /** * Creates a <code>HashMap</code> of the optimal hash capacity for given * maximum size and the load factor. * * @param <U> key type * @param <V> value type * @param size maximum size of the map * @param loadFactor usage percentage before a rehash occurs. Default value for * Collections framework is 0.75. Lower values result in less * chance of collisions at the expense of larger memory footprint * @return the created <code>HashMap</code> */ public static <U, V> HashMap<U, V> createHashMap(int size, float loadFactor) { return new HashMap<U, V>(calcHashCapacity(size, loadFactor), loadFactor); } /** * Creates a <code>HashMap</code> subclass instance of the optimal hash capacity for given * maximum size and the load factor. * * @param <U> key type * @param <V> value type * * @param clazz the subclass instance to create * @param size maximum size of the map * @param loadFactor usage percentage before a rehash occurs. Default value for * Collections framework is 0.75. Lower values result in less * chance of collisions at the expense of larger memory footprint * @return the created <code>LinkedHashSet</code> */ public static <U, V, C extends HashMap<U, V>> C createHashMap(Class<C> clazz, int size, float loadFactor) { return (C) createHash(clazz, size, loadFactor); } /** * Calculates the optimal hash capacity for given maximum size and the * load factor. * * @param size maximum size of the collection * @param loadFactor usage percentage before a rehash occurs. Default value for * Collections framework is 0.75. Lower values result in less * chance of collisions at the expense of larger memory footprint * @return the optimal hash capacity */ public static int calcHashCapacity(int size, float loadFactor) { return (int) Math.ceil(size / loadFactor); } private static Object createHash(Class<?> clazz, int size, float loadFactor) { // try to use reflection to create the instance try { // use performance parameters Constructor<?> c = clazz.getConstructor(int.class, float.class); return c.newInstance(calcHashCapacity(size, loadFactor), loadFactor); } catch (Exception e) { try { // try default constructor return clazz.newInstance(); } catch (Exception e2) { throw new IllegalArgumentException("clazz=" + clazz); } } } }