Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//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);
            }
        }
    }
}