【发布时间】:2011-09-06 19:07:48
【问题描述】:
我正在创建一个新地图并将字符串推入其中(没什么大不了的)-但我注意到随着地图的增长,字符串正在重新排序。是否可以停止这种重新排序,以便地图中的项目保留放置时的顺序?
Map<String,String> x = new HashMap<String, String>();
x.put("a","b");
x.put("a","c");
x.put("a","d");
x.put("1","2");
x.put("1","3");
x.put("1","4");
//this shows them out of order sadly...
for (Map.Entry<String, String> entry : x.entrySet()) {
System.out.println("IN THIS ORDER ... " + entry.getValue());
}
【问题讨论】:
-
如果没有排序,就不可能是hashmap,真的……
-
@tdammers - 嗯?你能解释一下吗?
-
如果它排序它不是哈希映射会更准确。哈希映射放置条目是一种随机模式。 LinkedHashMap 通过记住您添加它们的顺序或它们最后使用的顺序来隐藏这一点。但是,它们仍将在其基础存储中以随机顺序放置。
-
我的意思是 hashmap 存储算法通过它们的 hash 对条目进行排序以允许 O(log n) 哈希查找(或者更确切地说,排序是 hashmap 存储它的方式的副作用条目)。按哈希排序不是一种随机模式,尽管由于哈希值的任意性质,它可能看起来像一种随机模式。
-
@tdammers 可能是一个错字——哈希图平均争取 O(1) 查找; treemaps 争取 O(log n) 查找。