如何从iterator()获取正确顺序的元素

这是我的代码,用于将数据存储到HashMap中并使用迭代器显示数据

public static void main(String args[]) { HashMap hm = new HashMap(); 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); } } 

但它没有按照我存储的顺序显示。 有人可以告诉我哪里出错了? 我怎样才能获得订单中的元素?

HashMap没有保证的顺序:

这个类不保证地图的顺序;

使用LinkedHashMap 。

Map接口的哈希表和链表实现,具有可预测的迭代顺序。

您需要使用LinkedHashMap,因为它维护其条目的顺序,这与HashMap不同。

来自javadocs:

…具有可预测迭代顺序的Map接口的实现。 此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。 此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序)。

HashMap没有保持我们将数据放入其中的顺序。所以你可以跟随LinkedHashMap。它保持我们放置data.LinkedHashMap的顺序可以和HashMap一样使用。

 Map map=new LinkedHashMap(); map.put("key","value"); map.put("key","value"); map.put("key","value"); 

//类似地,您也可以使用迭代器来访问数据。它将按照您添加到它的顺序显示dfata。

原因是HashMap和HashSet不保证存储值的顺序。 元素的位置将取决于内部表的大小和键的hashCode。

如果要按某种顺序加载数据,则需要对键/值进行排序。 例如,您可以将条目集合(Map.entrySet())放入列表中,并按您想要的任何条件进行排序。 或者您可以使用SortedMap(例如TreeMap)来存储对象。