Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从iterator()以正确的顺序获取元素_Java_Iterator_Hashmap - Fatal编程技术网

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

Java 如何从iterator()以正确的顺序获取元素,java,iterator,hashmap,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"

下面是我将数据存储到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);
    }
}
publicstaticvoidmain(字符串参数[]){
HashMap hm=新的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”);
迭代器迭代器=hm.keySet().Iterator();
while(iterator.hasNext()){
字符串键=(字符串)迭代器。下一步();
字符串val=hm.get(键);
System.out.println(键+“”+val);
}
}
但是它没有按照我存储的顺序显示。谁能告诉我哪里出了问题?如何按顺序获取元素

A没有保证订单:

此类不保证地图的顺序

使用一个

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

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

从javadocs:

。。。使用可预测的迭代顺序实现Map接口。此实现不同于 HashMap,因为它维护一个贯穿所有应用程序的双链接列表 它的条目。此链表定义了迭代顺序,其中 通常是将关键点插入地图的顺序 (插入顺序)


HashMap不保持我们将数据放入其中的顺序。因此,您可以改为使用LinkedHashMap。它保持我们将数据放入其中的顺序。LinkedHashMap可以与HashMap一样使用

Map<key,value> map=new LinkedHashMap<key,value>();
map.put("key","value");
map.put("key","value");
map.put("key","value");
Map Map=newlinkedhashmap();
地图放置(“键”、“值”);
地图放置(“键”、“值”);
地图放置(“键”、“值”);

//同样,您也可以使用迭代器访问数据。它将按添加数据的顺序显示数据。

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


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

duplicate???我从不抄一次答案。我所知道的我都贴出来了。这并不意味着我所知道的没有人知道?在给出否定的分数之前先想一想,看看别人给出的答案。他们已经解释了
HashMap
不能维持秩序,并建议使用
LinkedHashMap
作为替代方案。你的回答只提供了已经提供的内容。它实际上提供的更少,因为您甚至没有链接到javadocs。我确实考虑过投反对票,我甚至确保我没有匿名回答-不客气。每个问题都有一个类似的答案,如果有多个答案,那么所有答案都表示类似的答案。这并不意味着我们抄袭。因此每个问题通常都会得到多个答案,所有答案在任何方面都有相同的含义。为什么你只看我的答案。我的答案比其他人有更多的描述。你的答案不是更具描述性,它只是有更多的单词。你说的其他一切都不是真的。如果一个问题已经得到了充分的回答,大多数人会放弃投票,不再提供自己的答案。如果他们有什么要补充的,他们通常会添加他们的小道消息作为评论。@mre他的回答比其他人晚3分钟。他大概花了3分钟以上的时间才写出来。