enrich CollectionHelper and make more use of it in existing code
This commit is contained in:
parent
5b22f3f9d4
commit
76089ae151
|
@ -12,6 +12,7 @@ import java.util.Map;
|
|||
|
||||
import org.hibernate.collection.spi.PersistentCollection;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||
import org.hibernate.metamodel.CollectionClassification;
|
||||
import org.hibernate.persister.collection.CollectionPersister;
|
||||
|
||||
|
@ -36,7 +37,7 @@ public class StandardOrderedMapSemantics extends AbstractMapSemantics<LinkedHash
|
|||
public LinkedHashMap<?, ?> instantiateRaw(
|
||||
int anticipatedSize,
|
||||
CollectionPersister collectionDescriptor) {
|
||||
return anticipatedSize < 1 ? new LinkedHashMap<>() : new LinkedHashMap<>( anticipatedSize );
|
||||
return anticipatedSize < 1 ? CollectionHelper.linkedMap() : CollectionHelper.linkedMapOfSize( anticipatedSize );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -12,6 +12,7 @@ import java.util.Set;
|
|||
|
||||
import org.hibernate.collection.spi.PersistentCollection;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||
import org.hibernate.metamodel.CollectionClassification;
|
||||
import org.hibernate.persister.collection.CollectionPersister;
|
||||
|
||||
|
@ -36,7 +37,7 @@ public class StandardOrderedSetSemantics extends AbstractSetSemantics<LinkedHash
|
|||
public LinkedHashSet<?> instantiateRaw(
|
||||
int anticipatedSize,
|
||||
CollectionPersister collectionDescriptor) {
|
||||
return anticipatedSize < 1 ? new LinkedHashSet<>() : new LinkedHashSet<>( anticipatedSize );
|
||||
return anticipatedSize < 1 ? CollectionHelper.linkedSet() : CollectionHelper.linkedSetOfSize( anticipatedSize );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -45,6 +45,7 @@ import org.hibernate.cache.CacheException;
|
|||
import org.hibernate.engine.internal.NonNullableTransientDependencies;
|
||||
import org.hibernate.internal.CoreLogging;
|
||||
import org.hibernate.internal.CoreMessageLogger;
|
||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||
import org.hibernate.metadata.ClassMetadata;
|
||||
import org.hibernate.proxy.HibernateProxy;
|
||||
import org.hibernate.proxy.LazyInitializer;
|
||||
|
@ -105,7 +106,7 @@ public class ActionQueue {
|
|||
*/
|
||||
private static final LinkedHashMap<Class<? extends Executable>,ListProvider> EXECUTABLE_LISTS_MAP;
|
||||
static {
|
||||
EXECUTABLE_LISTS_MAP = new LinkedHashMap<>( 8 );
|
||||
EXECUTABLE_LISTS_MAP = CollectionHelper.linkedMapOfSize( 8 );
|
||||
|
||||
EXECUTABLE_LISTS_MAP.put(
|
||||
OrphanRemovalAction.class,
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
*/
|
||||
package org.hibernate.engine.spi;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
|
@ -140,7 +139,7 @@ public class BatchFetchQueue {
|
|||
}
|
||||
final LinkedHashSet<EntityKey> keysForEntity = batchLoadableEntityKeys.computeIfAbsent(
|
||||
key.getEntityName(),
|
||||
k -> new LinkedHashSet<>( 8 )
|
||||
k -> CollectionHelper.linkedSetOfSize( 8 )
|
||||
);
|
||||
|
||||
keysForEntity.add( key );
|
||||
|
@ -260,7 +259,7 @@ public class BatchFetchQueue {
|
|||
|
||||
final LinkedHashMap<CollectionEntry, PersistentCollection> map = batchLoadableCollections.computeIfAbsent(
|
||||
persister.getRole(),
|
||||
k -> new LinkedHashMap<>( 16 )
|
||||
k -> CollectionHelper.linkedMapOfSize( 16 )
|
||||
);
|
||||
|
||||
map.put( ce, collection );
|
||||
|
|
|
@ -11,7 +11,8 @@ import java.util.Collection;
|
|||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
|
@ -19,7 +20,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* Various help for handling collections.
|
||||
* Various helper util methods for handling collections.
|
||||
*
|
||||
* @author Gavin King
|
||||
* @author Steve Ebersole
|
||||
|
@ -29,22 +30,6 @@ public final class CollectionHelper {
|
|||
public static final int MINIMUM_INITIAL_CAPACITY = 16;
|
||||
public static final float LOAD_FACTOR = 0.75f;
|
||||
|
||||
/**
|
||||
* @deprecated use {@link java.util.Collections#EMPTY_LIST} or {@link java.util.Collections#emptyList()} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public static final List EMPTY_LIST = Collections.EMPTY_LIST;
|
||||
/**
|
||||
* @deprecated use {@link java.util.Collections#EMPTY_LIST} or {@link java.util.Collections#emptyList()} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public static final Collection EMPTY_COLLECTION = Collections.EMPTY_LIST;
|
||||
/**
|
||||
* @deprecated use {@link java.util.Collections#EMPTY_MAP} or {@link java.util.Collections#emptyMap()} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public static final Map EMPTY_MAP = Collections.EMPTY_MAP;
|
||||
|
||||
private CollectionHelper() {
|
||||
}
|
||||
|
||||
|
@ -61,6 +46,37 @@ public final class CollectionHelper {
|
|||
return new HashMap<>( determineProperSizing( size ), LOAD_FACTOR );
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a properly sized linked map, especially handling load size and load factor to prevent immediate resizing.
|
||||
* <p/>
|
||||
* Especially helpful for copy map contents.
|
||||
*
|
||||
* @param size The size to make the map.
|
||||
*
|
||||
* @return The sized linked map.
|
||||
*/
|
||||
public static <K, V> LinkedHashMap<K, V> linkedMapOfSize(int size) {
|
||||
return new LinkedHashMap<>( determineProperSizing( size ), LOAD_FACTOR );
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a map whose size is unknown.
|
||||
*
|
||||
* @return The map.
|
||||
*/
|
||||
public static <K, V> HashMap<K, V> map() {
|
||||
return new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a linked map whose size is unknown.
|
||||
*
|
||||
* @return The linked map.
|
||||
*/
|
||||
public static <K, V> LinkedHashMap<K, V> linkedMap() {
|
||||
return new LinkedHashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a properly sized set, especially handling load size and load factor to prevent immediate resizing.
|
||||
* <p/>
|
||||
|
@ -74,6 +90,37 @@ public final class CollectionHelper {
|
|||
return new HashSet<>( determineProperSizing( size ), LOAD_FACTOR );
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a set whose size is unknown.
|
||||
*
|
||||
* @return The set.
|
||||
*/
|
||||
public static <K> HashSet<K> set() {
|
||||
return new HashSet<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a properly sized linked set, especially handling load size and load factor to prevent immediate resizing.
|
||||
* <p/>
|
||||
* Especially helpful for copy set contents.
|
||||
*
|
||||
* @param size The size to make the set.
|
||||
*
|
||||
* @return The sized linked set.
|
||||
*/
|
||||
public static <K> LinkedHashSet<K> linkedSetOfSize(int size) {
|
||||
return new LinkedHashSet<>( determineProperSizing( size ), LOAD_FACTOR );
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a linked set whose size is unknown.
|
||||
*
|
||||
* @return The linked set.
|
||||
*/
|
||||
public static <K> LinkedHashSet<K> linkedSet() {
|
||||
return new LinkedHashSet<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a map, determine the proper initial size for a new Map to hold the same number of values.
|
||||
* Specifically we want to account for load size and load factor to prevent immediate resizing.
|
||||
|
|
|
@ -531,10 +531,9 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister {
|
|||
if ( persistentClass.isPolymorphic() ) {
|
||||
subclassesByDiscriminatorValue.put( discriminatorValue, getEntityName() );
|
||||
|
||||
final int initialCapacity = CollectionHelper.determineProperSizing( subclassSpan + 1 );
|
||||
discriminatorValuesByTableName = new LinkedHashMap<>( initialCapacity );
|
||||
discriminatorColumnNameByTableName = new LinkedHashMap<>( initialCapacity );
|
||||
subclassNameByTableName = new HashMap<>( initialCapacity );
|
||||
discriminatorValuesByTableName = CollectionHelper.linkedMapOfSize( subclassSpan + 1 );
|
||||
discriminatorColumnNameByTableName = CollectionHelper.linkedMapOfSize( subclassSpan + 1 );
|
||||
subclassNameByTableName = CollectionHelper.mapOfSize( subclassSpan + 1 );
|
||||
// We need to convert the `discriminatorSQLString` (which is a String read from boot-mapping) into
|
||||
// the type indicated by `#discriminatorType` (String -> Integer, e.g.).
|
||||
try {
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.type;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||
import org.hibernate.type.spi.TypeConfiguration;
|
||||
|
||||
/**
|
||||
|
@ -21,8 +21,8 @@ public class OrderedMapType extends MapType {
|
|||
@Override
|
||||
public Object instantiate(int anticipatedSize) {
|
||||
return anticipatedSize > 0
|
||||
? new LinkedHashMap( anticipatedSize )
|
||||
: new LinkedHashMap();
|
||||
? CollectionHelper.linkedMap()
|
||||
: CollectionHelper.linkedMapOfSize( anticipatedSize );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.type;
|
||||
import java.util.LinkedHashSet;
|
||||
|
||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||
import org.hibernate.type.spi.TypeConfiguration;
|
||||
|
||||
/**
|
||||
|
@ -21,8 +21,8 @@ public class OrderedSetType extends SetType {
|
|||
@Override
|
||||
public Object instantiate(int anticipatedSize) {
|
||||
return anticipatedSize > 0
|
||||
? new LinkedHashSet( anticipatedSize )
|
||||
: new LinkedHashSet();
|
||||
? CollectionHelper.linkedSetOfSize( anticipatedSize )
|
||||
: CollectionHelper.linkedSet();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
*/
|
||||
package org.hibernate.type;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
import org.hibernate.collection.internal.PersistentSet;
|
||||
import org.hibernate.collection.spi.PersistentCollection;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
|
@ -39,7 +37,7 @@ public class SetType extends CollectionType {
|
|||
@Override
|
||||
public Object instantiate(int anticipatedSize) {
|
||||
return anticipatedSize <= 0
|
||||
? new HashSet()
|
||||
? CollectionHelper.set()
|
||||
: CollectionHelper.setOfSize( anticipatedSize );
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue