当前位置:  开发笔记 > 编程语言 > 正文

Java 5中Java 7 for HashMap的变化

如何解决《Java5中Java7forHashMap的变化》经验,为你挑选了1个好方法。



1> Daniel..:

散列算法已更改.这意味着您不能依赖迭代顺序java.util.HashMap.这不应该让人感到意外,JDK从来没有给出任何这样的保证.如果订单对您很重要,请使用TreeMapLinkedHashMap.

JDK5 HashMap:

static final int hash(Object key) {
   int h;
   return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

JDK7 HashMap:

final int hash(Object k) {
  int h = hashSeed;
  if (0 != h && k instanceof String) {
     return sun.misc.Hashing.stringHash32((String) k);
  }

  h ^= k.hashCode();
  // This function ensures that hashCodes that differ only by
  // constant multiples at each bit position have a bounded
  // number of collisions (approximately 8 at default load factor).
  h ^= (h >>> 20) ^ (h >>> 12);
  return h ^ (h >>> 7) ^ (h >>> 4);
}


在Java 8中,哈希算法再次变回Java 5版本!一点历史:Java 7算法是针对漏洞的修复,攻击者可能通过导致大量冲突导致"HashMap"的性能非常糟糕.在Java 8中引入了另一个修复程序,使用搜索树来处理具有大量冲突的容器.
推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有