[12] RFR: 8215194: Initial size of UnicodeBlock map is incorrect

Naoto Sato naoto.sato at oracle.com
Tue Dec 11 18:59:48 UTC 2018


Hi Ivan,

Thank you for the review.

On 12/11/18 10:49 AM, Ivan Gerasimov wrote:
> OptimalCapacity.ofHashMap uses the initialCapacity to verify that a 
> HashMap created with that initialCapacity will not reallocate its 
> internal array after inserting the factual number of elements.
> 
> So, if one day the number of entities is increased, but the constant 
> NUM_ENTITIES is not updated, then the test will catch it.

Actually the reason I am fixing it is that, the test did not detect the 
discrepancy with Unicode 11 upgrade, where it just increased the entry 
numbers by the true block increases (11 blocks), without adding their 
aliases.

---

--- a/src/java.base/share/classes/java/lang/Character.java	Wed Nov 14 
13:15:54 2018 +0100
+++ b/src/java.base/share/classes/java/lang/Character.java	Wed Nov 21 
14:24:31 2018 +0530
@@ -43,7 +43,7 @@
   * a character's category (lowercase letter, digit, etc.) and for 
converting
   * characters from uppercase to lowercase and vice versa.
   * <p>
- * Character information is based on the Unicode Standard, version 10.0.0.
+ * Character information is based on the Unicode Standard, version 11.0.0.
   * <p>
   * The methods and data of class {@code Character} are defined by
   * the information in the <i>UnicodeData</i> file that is part of the
@@ -681,11 +681,11 @@
       */
      public static final class UnicodeBlock extends Subset {
          /**
-         * 638  - the expected number of entities
+         * 649  - the expected number of entities
           * 0.75 - the default load factor of HashMap
           */
          private static Map<String, UnicodeBlock> map =
-                new HashMap<>((int)(638 / 0.75f + 1.0f));
+                new HashMap<>((int)(649 / 0.75f + 1.0f));

          /**
           * Creates a UnicodeBlock with the given identifier name.
---

However, the HashMap allocates the entry size to the nearest power of 
two number, i.e., 1024 for both numbers 649 and 667. Thus the test 
passes even if there is discrepancy.

Naoto


More information about the core-libs-dev mailing list