如何从迭代器()中以正确的顺序获取元素
Posted
技术标签:
【中文标题】如何从迭代器()中以正确的顺序获取元素【英文标题】:How to get the elements in correct order from iterator() 【发布时间】:2011-10-23 04:43:02 【问题描述】:这是我将数据存储到 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);
但它没有按照我存储的顺序显示。有人可以告诉我我哪里出错了吗?如何获取订单中的元素?
【问题讨论】:
【参考方案1】:HashMap 没有保证顺序:
这个类不保证地图的顺序;
使用LinkedHashMap。
Map接口的哈希表和链表实现,迭代顺序可预测。
【讨论】:
【参考方案2】:您需要使用LinkedHashMap,因为它维护其条目的顺序,这与 HashMap 不同。
来自 javadocs:
...可预测的迭代顺序实现 Map 接口。此实现不同于 HashMap,因为它维护一个双向链表,贯穿所有 其条目。这个链表定义了迭代顺序,它 通常是键插入映射的顺序 (插入顺序)。
【讨论】:
【参考方案3】:HashMap不保持我们放入数据的顺序,所以你可以改用LinkedHashMap,它保持我们放入数据的顺序。LinkedHashMap可以和HashMap一样使用。
Map<key,value> map=new LinkedHashMap<key,value>();
map.put("key","value");
map.put("key","value");
map.put("key","value");
//同样你也可以使用迭代器来访问数据。它会按照你添加的顺序显示dfata。
【讨论】:
重复???我从不复制一次答案。我知道我发布了。这并不意味着我知道没人知道吗?三思而后行。 看看别人提供的答案。他们已经解释过HashMap
不保持秩序,并建议使用LinkedHashMap
作为替代方案。您的回答仅提供了已经提供的内容。它实际上提供的更少,因为您甚至没有链接到 javadocs。我确实考虑了否决票,我什至确保我没有匿名投票 - 不客气。
每个问题都有一个相似的答案,如果有多个答案,则都表示相似的答案。这并不意味着我们复制了。因此,每个问题通常都会得到多个答案,并且所有答案都相同无论如何意思。为什么你只看我的答案。我的答案比其他人有更多的描述。
您的回答没有更多的描述性,它只是有更多的词。你说的其他一切都是不正确的。如果一个问题已经得到充分回答,大多数人会投票并避免提供自己的答案。如果他们有什么要补充的,他们通常会在评论中添加他们的花絮。
@mre 他的回答比其他人晚了 3 分钟。他可能花了 3 分钟以上的时间来写它。【参考方案4】:
原因是 HashMap 和 HashSet 不保证存储值的顺序。元素的位置将取决于内部表的大小和键的 hashCode。
如果您想按某种顺序加载数据,则需要对键/值进行排序。例如,您可以将条目集合 (Map.entrySet()) 放到列表中,并按您想要的任何标准进行排序。或者您可以使用 SortedMap(例如 TreeMap)来存储您的对象。
【讨论】:
以上是关于如何从迭代器()中以正确的顺序获取元素的主要内容,如果未能解决你的问题,请参考以下文章