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

时间:2011-08-09 12:29:22

标签: java iterator hashmap

这是我将数据存储到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);
    }
}

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

4 个答案:

答案 0 :(得分:23)

HashMap没有保证订单:

  

此课程不保证地图的顺序;

使用LinkedHashMap

  

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

答案 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)来存储对象。