mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8186958: Need method to create pre-sized HashMap
Reviewed-by: chegar, naoto, joehw, lancea, wetmore, smarks
This commit is contained in:
parent
41fc078323
commit
87faa85c59
30 changed files with 208 additions and 73 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -433,6 +433,10 @@ public class HashMap<K,V> extends AbstractMap<K,V>
|
|||
* Constructs an empty {@code HashMap} with the specified initial
|
||||
* capacity and load factor.
|
||||
*
|
||||
* @apiNote
|
||||
* To create a {@code HashMap} with an initial capacity that accommodates
|
||||
* an expected number of mappings, use {@link #newHashMap(int) newHashMap}.
|
||||
*
|
||||
* @param initialCapacity the initial capacity
|
||||
* @param loadFactor the load factor
|
||||
* @throws IllegalArgumentException if the initial capacity is negative
|
||||
|
@ -455,6 +459,10 @@ public class HashMap<K,V> extends AbstractMap<K,V>
|
|||
* Constructs an empty {@code HashMap} with the specified initial
|
||||
* capacity and the default load factor (0.75).
|
||||
*
|
||||
* @apiNote
|
||||
* To create a {@code HashMap} with an initial capacity that accommodates
|
||||
* an expected number of mappings, use {@link #newHashMap(int) newHashMap}.
|
||||
*
|
||||
* @param initialCapacity the initial capacity.
|
||||
* @throws IllegalArgumentException if the initial capacity is negative.
|
||||
*/
|
||||
|
@ -2545,4 +2553,32 @@ public class HashMap<K,V> extends AbstractMap<K,V>
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate initial capacity for HashMap based classes, from expected size and default load factor (0.75).
|
||||
*
|
||||
* @param numMappings the expected number of mappings
|
||||
* @return initial capacity for HashMap based classes.
|
||||
* @since 19
|
||||
*/
|
||||
static int calculateHashMapCapacity(int numMappings) {
|
||||
return (int) Math.ceil(numMappings / (double) DEFAULT_LOAD_FACTOR);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new, empty HashMap suitable for the expected number of mappings.
|
||||
* The returned map uses the default load factor of 0.75, and its initial capacity is
|
||||
* generally large enough so that the expected number of mappings can be added
|
||||
* without resizing the map.
|
||||
*
|
||||
* @param numMappings the expected number of mappings
|
||||
* @param <K> the type of keys maintained by this map
|
||||
* @param <V> the type of mapped values
|
||||
* @return the newly created map
|
||||
* @throws IllegalArgumentException if numMappings is negative
|
||||
* @since 19
|
||||
*/
|
||||
public static <K, V> HashMap<K, V> newHashMap(int numMappings) {
|
||||
return new HashMap<>(calculateHashMapCapacity(numMappings));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -117,7 +117,7 @@ public class HashSet<E>
|
|||
* @throws NullPointerException if the specified collection is null
|
||||
*/
|
||||
public HashSet(Collection<? extends E> c) {
|
||||
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
|
||||
map = HashMap.newHashMap(Math.max(c.size(), 12));
|
||||
addAll(c);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -339,6 +339,10 @@ public class LinkedHashMap<K,V>
|
|||
* Constructs an empty insertion-ordered {@code LinkedHashMap} instance
|
||||
* with the specified initial capacity and load factor.
|
||||
*
|
||||
* @apiNote
|
||||
* To create a {@code LinkedHashMap} with an initial capacity that accommodates
|
||||
* an expected number of mappings, use {@link #newLinkedHashMap(int) newLinkedHashMap}.
|
||||
*
|
||||
* @param initialCapacity the initial capacity
|
||||
* @param loadFactor the load factor
|
||||
* @throws IllegalArgumentException if the initial capacity is negative
|
||||
|
@ -353,6 +357,10 @@ public class LinkedHashMap<K,V>
|
|||
* Constructs an empty insertion-ordered {@code LinkedHashMap} instance
|
||||
* with the specified initial capacity and a default load factor (0.75).
|
||||
*
|
||||
* @apiNote
|
||||
* To create a {@code LinkedHashMap} with an initial capacity that accommodates
|
||||
* an expected number of mappings, use {@link #newLinkedHashMap(int) newLinkedHashMap}.
|
||||
*
|
||||
* @param initialCapacity the initial capacity
|
||||
* @throws IllegalArgumentException if the initial capacity is negative
|
||||
*/
|
||||
|
@ -788,5 +796,21 @@ public class LinkedHashMap<K,V>
|
|||
public final Map.Entry<K,V> next() { return nextNode(); }
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new, empty, insertion-ordered LinkedHashMap suitable for the expected number of mappings.
|
||||
* The returned map uses the default load factor of 0.75, and its initial capacity is
|
||||
* generally large enough so that the expected number of mappings can be added
|
||||
* without resizing the map.
|
||||
*
|
||||
* @param numMappings the expected number of mappings
|
||||
* @param <K> the type of keys maintained by this map
|
||||
* @param <V> the type of mapped values
|
||||
* @return the newly created map
|
||||
* @throws IllegalArgumentException if numMappings is negative
|
||||
* @since 19
|
||||
*/
|
||||
public static <K, V> LinkedHashMap<K, V> newLinkedHashMap(int numMappings) {
|
||||
return new LinkedHashMap<>(HashMap.calculateHashMapCapacity(numMappings));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -193,7 +193,7 @@ public abstract class ListResourceBundle extends ResourceBundle {
|
|||
return;
|
||||
|
||||
Object[][] contents = getContents();
|
||||
HashMap<String,Object> temp = new HashMap<>(contents.length);
|
||||
HashMap<String,Object> temp = HashMap.newHashMap(contents.length);
|
||||
for (Object[] content : contents) {
|
||||
// key must be non-null String, value must be non-null
|
||||
String key = (String) content[0];
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1998, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -198,6 +198,10 @@ public class WeakHashMap<K,V>
|
|||
* Constructs a new, empty {@code WeakHashMap} with the given initial
|
||||
* capacity and the given load factor.
|
||||
*
|
||||
* @apiNote
|
||||
* To create a {@code WeakHashMap} with an initial capacity that accommodates
|
||||
* an expected number of mappings, use {@link #newWeakHashMap(int) newWeakHashMap}.
|
||||
*
|
||||
* @param initialCapacity The initial capacity of the {@code WeakHashMap}
|
||||
* @param loadFactor The load factor of the {@code WeakHashMap}
|
||||
* @throws IllegalArgumentException if the initial capacity is negative,
|
||||
|
@ -223,6 +227,10 @@ public class WeakHashMap<K,V>
|
|||
* Constructs a new, empty {@code WeakHashMap} with the given initial
|
||||
* capacity and the default load factor (0.75).
|
||||
*
|
||||
* @apiNote
|
||||
* To create a {@code WeakHashMap} with an initial capacity that accommodates
|
||||
* an expected number of mappings, use {@link #newWeakHashMap(int) newWeakHashMap}.
|
||||
*
|
||||
* @param initialCapacity The initial capacity of the {@code WeakHashMap}
|
||||
* @throws IllegalArgumentException if the initial capacity is negative
|
||||
*/
|
||||
|
@ -1335,4 +1343,21 @@ public class WeakHashMap<K,V>
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new, empty WeakHashMap suitable for the expected number of mappings.
|
||||
* The returned map uses the default load factor of 0.75, and its initial capacity is
|
||||
* generally large enough so that the expected number of mappings can be added
|
||||
* without resizing the map.
|
||||
*
|
||||
* @param numMappings the expected number of mappings
|
||||
* @param <K> the type of keys maintained by this map
|
||||
* @param <V> the type of mapped values
|
||||
* @return the newly created map
|
||||
* @throws IllegalArgumentException if numMappings is negative
|
||||
* @since 19
|
||||
*/
|
||||
public static <K, V> WeakHashMap<K, V> newWeakHashMap(int numMappings) {
|
||||
return new WeakHashMap<>(HashMap.calculateHashMapCapacity(numMappings));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -69,7 +69,7 @@ public class Attributes implements Map<Object,Object>, Cloneable {
|
|||
* Constructs a new, empty Attributes object with default size.
|
||||
*/
|
||||
public Attributes() {
|
||||
this(11);
|
||||
this(16);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -79,7 +79,7 @@ public class Attributes implements Map<Object,Object>, Cloneable {
|
|||
* @param size the initial number of attributes
|
||||
*/
|
||||
public Attributes(int size) {
|
||||
map = new LinkedHashMap<>(size);
|
||||
map = LinkedHashMap.newLinkedHashMap(size);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -672,7 +672,7 @@ class JarVerifier {
|
|||
* only about the asserted signatures. Verification of
|
||||
* signature validity happens via the JarEntry apis.
|
||||
*/
|
||||
signerMap = new HashMap<>(verifiedSigners.size() + sigFileSigners.size());
|
||||
signerMap = HashMap.newHashMap(verifiedSigners.size() + sigFileSigners.size());
|
||||
signerMap.putAll(verifiedSigners);
|
||||
signerMap.putAll(sigFileSigners);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue