From: <hib...@li...> - 2006-07-10 16:32:28
|
Author: ste...@jb... Date: 2006-07-10 12:31:09 -0400 (Mon, 10 Jul 2006) New Revision: 10100 Modified: trunk/Hibernate3/src/org/hibernate/type/OrderedMapType.java trunk/Hibernate3/src/org/hibernate/type/OrderedSetType.java trunk/Hibernate3/src/org/hibernate/type/SortedMapType.java trunk/Hibernate3/src/org/hibernate/type/SortedSetType.java trunk/Hibernate3/src/org/hibernate/util/LinkedHashCollectionHelper.java Log: HHH-1892 Modified: trunk/Hibernate3/src/org/hibernate/type/OrderedMapType.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/type/OrderedMapType.java 2006-07-10 13:04:04 UTC (rev 10099) +++ trunk/Hibernate3/src/org/hibernate/type/OrderedMapType.java 2006-07-10 16:31:09 UTC (rev 10100) @@ -9,8 +9,8 @@ super( role, propertyRef, isEmbeddedInXML ); } - public Object instantiate() { - return LinkedHashCollectionHelper.createLinkedHashMap(); + public Object instantiate(int anticipatedSize) { + return LinkedHashCollectionHelper.createLinkedHashMap( anticipatedSize ); } } Modified: trunk/Hibernate3/src/org/hibernate/type/OrderedSetType.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/type/OrderedSetType.java 2006-07-10 13:04:04 UTC (rev 10099) +++ trunk/Hibernate3/src/org/hibernate/type/OrderedSetType.java 2006-07-10 16:31:09 UTC (rev 10100) @@ -9,8 +9,8 @@ super( role, propertyRef, isEmbeddedInXML ); } - public Object instantiate() { - return LinkedHashCollectionHelper.createLinkedHashSet(); + public Object instantiate(int anticipatedSize) { + return LinkedHashCollectionHelper.createLinkedHashSet( anticipatedSize ); } } Modified: trunk/Hibernate3/src/org/hibernate/type/SortedMapType.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/type/SortedMapType.java 2006-07-10 13:04:04 UTC (rev 10099) +++ trunk/Hibernate3/src/org/hibernate/type/SortedMapType.java 2006-07-10 16:31:09 UTC (rev 10100) @@ -39,7 +39,7 @@ return java.util.SortedMap.class; } - public Object instantiate() { + public Object instantiate(int anticipatedSize) { return new TreeMap(comparator); } Modified: trunk/Hibernate3/src/org/hibernate/type/SortedSetType.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/type/SortedSetType.java 2006-07-10 13:04:04 UTC (rev 10099) +++ trunk/Hibernate3/src/org/hibernate/type/SortedSetType.java 2006-07-10 16:31:09 UTC (rev 10100) @@ -37,7 +37,7 @@ return java.util.SortedSet.class; } - public Object instantiate() { + public Object instantiate(int anticipatedSize) { return new TreeSet(comparator); } Modified: trunk/Hibernate3/src/org/hibernate/util/LinkedHashCollectionHelper.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/util/LinkedHashCollectionHelper.java 2006-07-10 13:04:04 UTC (rev 10099) +++ trunk/Hibernate3/src/org/hibernate/util/LinkedHashCollectionHelper.java 2006-07-10 16:31:09 UTC (rev 10100) @@ -3,6 +3,7 @@ import java.util.Map; import java.util.Set; +import java.lang.reflect.Constructor; import org.hibernate.AssertionFailure; @@ -10,19 +11,33 @@ private static final Class SET_CLASS; private static final Class MAP_CLASS; + private static final Class[] CAPACITY_CTOR_SIG = new Class[] { int.class, float.class }; + private static final Constructor SET_CAPACITY_CTOR; + private static final Constructor MAP_CAPACITY_CTOR; + private static final float LOAD_FACTOR_V = .75f; + private static final Float LOAD_FACTOR = new Float( LOAD_FACTOR_V ); + static { Class setClass; Class mapClass; + Constructor setCtor; + Constructor mapCtor; try { - setClass = Class.forName("java.util.LinkedHashSet"); - mapClass = Class.forName("java.util.LinkedHashMap"); + setClass = Class.forName( "java.util.LinkedHashSet" ); + mapClass = Class.forName( "java.util.LinkedHashMap" ); + setCtor = setClass.getConstructor( CAPACITY_CTOR_SIG ); + mapCtor = mapClass.getConstructor( CAPACITY_CTOR_SIG ); } - catch (ClassNotFoundException cnfe) { + catch ( Throwable t ) { setClass = null; mapClass = null; + setCtor = null; + mapCtor = null; } SET_CLASS = setClass; MAP_CLASS = mapClass; + SET_CAPACITY_CTOR = setCtor; + MAP_CAPACITY_CTOR = mapCtor; } public static Set createLinkedHashSet() { @@ -34,6 +49,19 @@ } } + public static Set createLinkedHashSet(int anticipatedSize) { + if ( anticipatedSize <= 0 ) { + return createLinkedHashSet(); + } + int initialCapacity = anticipatedSize + (int)( anticipatedSize * LOAD_FACTOR_V ); + try { + return ( Set ) SET_CAPACITY_CTOR.newInstance( new Object[] { new Integer( initialCapacity ), LOAD_FACTOR } ); + } + catch (Exception e) { + throw new AssertionFailure("Could not instantiate LinkedHashSet", e); + } + } + public static Map createLinkedHashMap() { try { return (Map) MAP_CLASS.newInstance(); @@ -43,6 +71,19 @@ } } + public static Map createLinkedHashMap(int anticipatedSize) { + if ( anticipatedSize <= 0 ) { + return createLinkedHashMap(); + } + int initialCapacity = anticipatedSize + (int)( anticipatedSize * LOAD_FACTOR_V ); + try { + return ( Map ) MAP_CAPACITY_CTOR.newInstance( new Object[] { new Integer( initialCapacity ), LOAD_FACTOR } ); + } + catch (Exception e) { + throw new AssertionFailure("Could not instantiate LinkedHashMap", e); + } + } + private LinkedHashCollectionHelper() {} } |