|
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() {}
}
|