这是我将数据存储到HashMap并使用迭代器
显示数据的代码public static void main(String args[]) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("aaa", "111");
hm.put("bbb", "222");
hm.put("ccc", "333");
hm.put("ddd", "444");
hm.put("eee", "555");
hm.put("fff", "666");
Iterator iterator = hm.keySet().iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
String val = hm.get(key);
System.out.println(key + " " + val);
}
}
但它没有按照我存储的顺序显示。有人可以告诉我哪里出错了吗?我怎样才能获得订单中的元素?
答案 0 :(得分:23)
答案 1 :(得分:6)
您需要使用LinkedHashMap,因为它维护其条目的顺序,与HashMap不同。
来自javadocs:
...使用可预测的迭代顺序实现Map接口。这个实现不同于 HashMap,它维护着一个贯穿所有的双向链表 其条目。此链接列表定义了迭代顺序,即 通常是键插入地图的顺序 (插入顺序)。
答案 2 :(得分:2)
HashMap没有保留我们将数据放入其中的顺序。所以你可以改为使用LinkedHashMap。它保持我们放置data.LinkedHashMap的顺序可以和HashMap一样使用。
Map<key,value> map=new LinkedHashMap<key,value>();
map.put("key","value");
map.put("key","value");
map.put("key","value");
//类似地,您也可以使用迭代器来访问数据。它将按照您添加到它的顺序显示dfata。
答案 3 :(得分:0)
原因是HashMap和HashSet不保证存储值的顺序。元素的位置取决于内部表的大小和键的hashCode。
如果要按某种顺序加载数据,则需要对键/值进行排序。例如,您可以将条目集合(Map.entrySet())放入列表,并按您想要的任何条件排序。或者您可以使用SortedMap(例如TreeMap)来存储对象。