Java 5中Java 7 for HashMap的变化
发布时间:2020-12-15 04:47:19 所属栏目:Java 来源:网络整理
导读:我不是 Java专家,只是体验 Java 5和Java 7上以下程序输出的变化.任何人都知道Java 7中HashMap实现的变化是什么吗? import java.util.HashMap;import java.util.Map;public class HashMapDemo { public static void main(String[] args) { MapString,String
我不是
Java专家,只是体验
Java 5和Java 7上以下程序输出的变化.任何人都知道Java 7中HashMap实现的变化是什么吗?
import java.util.HashMap; import java.util.Map; public class HashMapDemo { public static void main(String[] args) { Map<String,String> map = new HashMap<String,String>(); map.put("1","111"); map.put("a","aaa"); map.put("A","AAA"); map.put("D","DDD"); map.put("d","ddd"); map.put("0","000"); map.put("B","BBB"); map.put("b","bbb"); map.put("2","222"); for(Map.Entry<String,String> entry : map.entrySet()){ System.out.println(entry.getKey()+ " "+entry.getValue()); } } } Java 7上的输出 D DDD 2 222 d ddd 1 111 0 000 b bbb A AAA B BBB a aaa Java 5上的输出 0 000 1 111 a aaa A AAA B BBB b bbb 2 222 D DDD d ddd 解决方法
散列算法已更改.这意味着您不能依赖java.util.HashMap的迭代顺序.这不应该让人感到意外,JDK从来没有给出任何这样的保证.如果订单对您很重要,请使用TreeMap或LinkedHashMap.
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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |