Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8051856

HashMap.hashCode() returns same int value even if the contents has been changed

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P3 P3
    • None
    • 6-pool, 7-pool, 8-pool
    • core-libs

      FULL PRODUCT VERSION :
      java version "1.6.0_27"
      Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
      Java HotSpot(TM) 64-Bit Server VM (build 20.2-b06, mixed mode)

      A DESCRIPTION OF THE PROBLEM :
      Code:
      Map<String, String> hm = new HashMap<String, String>();
      System.out.println("hashCode() -> " + hm.hashCode());
      System.out.println("Map -> " + hm);
      for(int i=0; i<10; i++)
      {
      Long in = new Long(i);
      hm.put(String.valueOf(in), String.valueOf(in));
      }
      System.out.println("hashCode() -> " + hm.hashCode());
      System.out.println("Map -> " + hm);
      for(int i=10; i<20; i++)
      {
      Long in = new Long(i);
      hm.put(String.valueOf(in), String.valueOf(in));
      }
      System.out.println("hashCode() -> " + hm.hashCode());
      System.out.println("Map -> " + hm);

      Output:
      hashCode() -> 0
      Map -> {}
      hashCode() -> 0
      Map -> {3=3, 2=2, 1=1, 0=0, 7=7, 6=6, 5=5, 4=4, 9=9, 8=8}
      hashCode() -> 0
      Map -> {19=19, 17=17, 18=18, 15=15, 16=16, 13=13, 14=14, 11=11, 12=12, 3=3, 2=2, 1=1, 10=10, 0=0, 7=7, 6=6, 5=5, 4=4, 9=9, 8=8}

      REGRESSION. Last worked in version 6u31

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      HashMap.hashCode() should return different int values when the contents of the HashMap changes.

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      Map<String, String> hm = new HashMap<String, String>();
      System.out.println("hashCode() -> " + hm.hashCode());
      System.out.println("Map -> " + hm);
      for(int i=0; i<10; i++)
      {
      Long in = new Long(i);
      hm.put(String.valueOf(in), String.valueOf(in));
      }
      System.out.println("hashCode() -> " + hm.hashCode());
      System.out.println("Map -> " + hm);
      for(int i=10; i<20; i++)
      {
      Long in = new Long(i);
      hm.put(String.valueOf(in), String.valueOf(in));
      }
      System.out.println("hashCode() -> " + hm.hashCode());
      System.out.println("Map -> " + hm);
      ---------- END SOURCE ----------

            mduigou Mike Duigou
            robm Robert Mckenna
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported: