diff --git a/src/java/org/apache/commons/lang/IntHashMap.java b/src/java/org/apache/commons/lang/IntHashMap.java deleted file mode 100644 index b0d42e2f7..000000000 --- a/src/java/org/apache/commons/lang/IntHashMap.java +++ /dev/null @@ -1,364 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ - -/* - * Note: originally released under the GNU LGPL v2.1, - * but rereleased by the original author under the ASF license (above). - */ -package org.apache.commons.lang; - -/** - *

A hash map that uses primitive ints for the key rather than objects.

- * - *

Note that this class is for internal optimization purposes only, and may - * not be supported in future releases of Apache Commons Lang. Utilities of - * this sort may be included in future releases of Apache Commons Collections.

- * - * @author Justin Couch - * @author Alex Chaffee (alex@apache.org) - * @author Stephen Colebourne - * @since 2.0 - * @version $Revision$ - * @see java.util.HashMap - */ -class IntHashMap { - - /** - * The hash table data. - */ - private transient Entry table[]; - - /** - * The total number of entries in the hash table. - */ - private transient int count; - - /** - * The table is rehashed when its size exceeds this threshold. (The - * value of this field is (int)(capacity * loadFactor).) - * - * @serial - */ - private int threshold; - - /** - * The load factor for the hashtable. - * - * @serial - */ - private float loadFactor; - - /** - *

Innerclass that acts as a datastructure to create a new entry in the - * table.

- */ - private static class Entry { - int hash; -// int key; // not used currently - Object value; - Entry next; - - /** - *

Create a new entry with the given values.

- * - * @param hash The code used to hash the object with - * @param key The key used to enter this in the table - * @param value The value for this key - * @param next A reference to the next entry in the table - */ - protected Entry(int hash, int key, Object value, Entry next) { - this.hash = hash; -// this.key = key; - this.value = value; - this.next = next; - } - } - - /** - *

Constructs a new, empty hashtable with a default capacity and load - * factor, which is 20 and 0.75 respectively.

- */ - public IntHashMap() { - this(20, 0.75f); - } - - /** - *

Constructs a new, empty hashtable with the specified initial capacity - * and default load factor, which is 0.75.

- * - * @param initialCapacity the initial capacity of the hashtable. - * @throws IllegalArgumentException if the initial capacity is less - * than zero. - */ - public IntHashMap(int initialCapacity) { - this(initialCapacity, 0.75f); - } - - /** - *

Constructs a new, empty hashtable with the specified initial - * capacity and the specified load factor.

- * - * @param initialCapacity the initial capacity of the hashtable. - * @param loadFactor the load factor of the hashtable. - * @throws IllegalArgumentException if the initial capacity is less - * than zero, or if the load factor is nonpositive. - */ - public IntHashMap(int initialCapacity, float loadFactor) { - super(); - if (initialCapacity < 0) { - throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity); - } - if (loadFactor <= 0) { - throw new IllegalArgumentException("Illegal Load: " + loadFactor); - } - if (initialCapacity == 0) { - initialCapacity = 1; - } - - this.loadFactor = loadFactor; - table = new Entry[initialCapacity]; - threshold = (int) (initialCapacity * loadFactor); - } - - /** - *

Returns the number of keys in this hashtable.

- * - * @return the number of keys in this hashtable. - */ - public int size() { - return count; - } - - /** - *

Tests if this hashtable maps no keys to values.

- * - * @return true if this hashtable maps no keys to values; - * false otherwise. - */ - public boolean isEmpty() { - return count == 0; - } - - /** - *

Tests if some key maps into the specified value in this hashtable. - * This operation is more expensive than the containsKey - * method.

- * - *

Note that this method is identical in functionality to containsValue, - * (which is part of the Map interface in the collections framework).

- * - * @param value a value to search for. - * @return true if and only if some key maps to the - * value argument in this hashtable as - * determined by the equals method; - * false otherwise. - * @throws NullPointerException if the value is null. - * @see #containsKey(int) - * @see #containsValue(Object) - * @see java.util.Map - */ - public boolean contains(Object value) { - if (value == null) { - throw new NullPointerException(); - } - - Entry tab[] = table; - for (int i = tab.length; i-- > 0;) { - for (Entry e = tab[i]; e != null; e = e.next) { - if (e.value.equals(value)) { - return true; - } - } - } - return false; - } - - /** - *

Returns true if this HashMap maps one or more keys - * to this value.

- * - *

Note that this method is identical in functionality to contains - * (which predates the Map interface).

- * - * @param value value whose presence in this HashMap is to be tested. - * @return boolean true if the value is contained - * @see java.util.Map - * @since JDK1.2 - */ - public boolean containsValue(Object value) { - return contains(value); - } - - /** - *

Tests if the specified object is a key in this hashtable.

- * - * @param key possible key. - * @return true if and only if the specified object is a - * key in this hashtable, as determined by the equals - * method; false otherwise. - * @see #contains(Object) - */ - public boolean containsKey(int key) { - Entry tab[] = table; - int hash = key; - int index = (hash & 0x7FFFFFFF) % tab.length; - for (Entry e = tab[index]; e != null; e = e.next) { - if (e.hash == hash) { - return true; - } - } - return false; - } - - /** - *

Returns the value to which the specified key is mapped in this map.

- * - * @param key a key in the hashtable. - * @return the value to which the key is mapped in this hashtable; - * null if the key is not mapped to any value in - * this hashtable. - * @see #put(int, Object) - */ - public Object get(int key) { - Entry tab[] = table; - int hash = key; - int index = (hash & 0x7FFFFFFF) % tab.length; - for (Entry e = tab[index]; e != null; e = e.next) { - if (e.hash == hash) { - return e.value; - } - } - return null; - } - - /** - *

Increases the capacity of and internally reorganizes this - * hashtable, in order to accommodate and access its entries more - * efficiently.

- * - *

This method is called automatically when the number of keys - * in the hashtable exceeds this hashtable's capacity and load - * factor.

- */ - protected void rehash() { - int oldCapacity = table.length; - Entry oldMap[] = table; - - int newCapacity = oldCapacity * 2 + 1; - Entry newMap[] = new Entry[newCapacity]; - - threshold = (int) (newCapacity * loadFactor); - table = newMap; - - for (int i = oldCapacity; i-- > 0;) { - for (Entry old = oldMap[i]; old != null;) { - Entry e = old; - old = old.next; - - int index = (e.hash & 0x7FFFFFFF) % newCapacity; - e.next = newMap[index]; - newMap[index] = e; - } - } - } - - /** - *

Maps the specified key to the specified - * value in this hashtable. The key cannot be - * null.

- * - *

The value can be retrieved by calling the get method - * with a key that is equal to the original key.

- * - * @param key the hashtable key. - * @param value the value. - * @return the previous value of the specified key in this hashtable, - * or null if it did not have one. - * @throws NullPointerException if the key is null. - * @see #get(int) - */ - public Object put(int key, Object value) { - // Makes sure the key is not already in the hashtable. - Entry tab[] = table; - int hash = key; - int index = (hash & 0x7FFFFFFF) % tab.length; - for (Entry e = tab[index]; e != null; e = e.next) { - if (e.hash == hash) { - Object old = e.value; - e.value = value; - return old; - } - } - - if (count >= threshold) { - // Rehash the table if the threshold is exceeded - rehash(); - - tab = table; - index = (hash & 0x7FFFFFFF) % tab.length; - } - - // Creates the new entry. - Entry e = new Entry(hash, key, value, tab[index]); - tab[index] = e; - count++; - return null; - } - - /** - *

Removes the key (and its corresponding value) from this - * hashtable.

- * - *

This method does nothing if the key is not present in the - * hashtable.

- * - * @param key the key that needs to be removed. - * @return the value to which the key had been mapped in this hashtable, - * or null if the key did not have a mapping. - */ - public Object remove(int key) { - Entry tab[] = table; - int hash = key; - int index = (hash & 0x7FFFFFFF) % tab.length; - for (Entry e = tab[index], prev = null; e != null; prev = e, e = e.next) { - if (e.hash == hash) { - if (prev != null) { - prev.next = e.next; - } else { - tab[index] = e.next; - } - count--; - Object oldValue = e.value; - e.value = null; - return oldValue; - } - } - return null; - } - - /** - *

Clears this hashtable so that it contains no keys.

- */ - public synchronized void clear() { - Entry tab[] = table; - for (int index = tab.length; --index >= 0;) { - tab[index] = null; - } - count = 0; - } - -} diff --git a/src/test/org/apache/commons/lang/IntHashMapTest.java b/src/test/org/apache/commons/lang/IntHashMapTest.java deleted file mode 100644 index ffe4aedc2..000000000 --- a/src/test/org/apache/commons/lang/IntHashMapTest.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ -package org.apache.commons.lang; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; -import junit.textui.TestRunner; - -/** - * Tests for the IntHashMap class. - * - * @author Steven Caswell - * @version $Id$ - */ -public class IntHashMapTest extends TestCase { - - public static void main(String[] args) { - TestRunner.run(suite()); - } - - public static Test suite() { - TestSuite suite = new TestSuite(IntHashMapTest.class); - suite.setName("IntHashMapTest Tests"); - return suite; - } - - public void testConstructor() { - try { - new IntHashMap(-1, 0.0f); - fail(); - } catch (IllegalArgumentException e) { - assertEquals("Illegal Capacity: -1", e.getMessage()); - } - try { - new IntHashMap(1, 0.0f); - fail(); - } catch (IllegalArgumentException e) { - assertEquals("Illegal Load: 0.0", e.getMessage()); - } - new IntHashMap(0, 1.0f); - - try { - new IntHashMap(-1); - fail(); - } catch (IllegalArgumentException e) { - assertEquals("Illegal Capacity: -1", e.getMessage()); - } - IntHashMap map1 = new IntHashMap(0); - assertEquals(0, map1.size()); - } - - public void testClear() { - IntHashMap map = new IntHashMap(); - assertNull(map.put(1, "hello")); - assertNull(map.put(2, "world")); - assertEquals(2, map.size()); - map.clear(); - assertEquals(0, map.size()); - } - - public void testContainsKey() { - IntHashMap map = new IntHashMap(); - assertNull(map.put(1, "hello")); - assertNull(map.put(2, "world")); - assertEquals(2, map.size()); - assertTrue(map.containsKey(1)); - assertTrue(map.containsKey(2)); - assertFalse(map.containsKey(3)); - } - - public void testContains() { - IntHashMap map = new IntHashMap(); - assertNull(map.put(1, "hello")); - assertNull(map.put(2, "world")); - assertEquals(2, map.size()); - assertTrue(map.containsValue("hello")); - assertTrue(map.containsValue("world")); - assertFalse(map.containsValue("goodbye")); - try { - map.containsValue(null); - fail(); - } catch(NullPointerException e) { - } - } - - public void testContainsValue() { - IntHashMap map = new IntHashMap(); - assertNull(map.put(1, "hello")); - assertNull(map.put(2, "world")); - assertEquals(2, map.size()); - assertTrue(map.containsValue("hello")); - assertTrue(map.containsValue("world")); - assertFalse(map.containsValue("goodbye")); - try { - map.containsValue(null); - fail(); - } catch(NullPointerException e) { - } - } - - public void testIsEmpty() { - IntHashMap map = new IntHashMap(); - assertTrue(map.isEmpty()); - assertNull(map.put(1, "hello")); - assertEquals(1, map.size()); - assertFalse(map.isEmpty()); - } - - public void testPut() { - IntHashMap map = new IntHashMap(); - assertNull(map.put(1, "hello")); - assertNull(map.put(2, "world")); - assertEquals(2, map.size()); - assertEquals("hello", map.put(1, "hellooooo")); - } - - public void testRemove() { - IntHashMap map = new IntHashMap(); - assertNull(map.put(1, "hello")); - assertNull(map.put(2, "world")); - assertEquals(2, map.size()); - assertEquals("hello", map.remove(1)); - assertEquals(1, map.size()); - assertNull(map.remove(3)); - } - -} diff --git a/src/test/org/apache/commons/lang/LangTestSuite.java b/src/test/org/apache/commons/lang/LangTestSuite.java index fe2ccbafb..c313e94f1 100644 --- a/src/test/org/apache/commons/lang/LangTestSuite.java +++ b/src/test/org/apache/commons/lang/LangTestSuite.java @@ -65,7 +65,6 @@ public class LangTestSuite extends TestCase { suite.addTest(EnumUtilsTest.suite()); suite.addTest(IllegalClassExceptionTest.suite()); suite.addTest(IncompleteArgumentExceptionTest.suite()); - suite.addTest(IntHashMapTest.suite()); suite.addTest(LocaleUtilsTest.suite()); suite.addTest(NotImplementedExceptionTest.suite()); suite.addTest(NullArgumentExceptionTest.suite());