在类似于
的代码中//something before
Iteration<String> iterator = hashMap.keySet().iterator();// HashMap<String, Document>
while(iterator.hasNext()){
System.out.println(iterator.next());
}
//something after
我知道按照输入键,值的顺序,打印顺序可能会有所不同;好的。
但是如果我在另一个时刻调用这个片段,重新创建变量 hashMap 并将它们放在相同的元素中,第二时刻的打印时间是否可以与首次打印不同?
我的问题是由一个网络应用程序的问题而产生的:我在JSP中有一个字符串的列表,但是,在几年后,客户调用因为的顺序字符串在早上有所不同,但它显示了下午的通常顺序。
问题仅在一天内发生:网络应用程序使用解释的代码片段来获取地图并填充 ArrayList 。
这个 ArrayList 没有任何明确的顺序更改(没有 Comparator 或类似的类)。
我认为(希望)不同打印顺序的原因是在运行时在相同的 HashMap 中通过不同的迭代序列导出,并且我正在寻找其他人的验证。
在网络中,我读到如果 HashMap 收到修改, HashMap 的迭代顺序会发生变化:但是如果 HashMap 保持不变?
答案 0 :(得分:1)
HashMap API documentation表明
此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。
答案 1 :(得分:1)
Hash map document says HashMap不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。
虽然解释虽然hashmap是相同的,但它无法保证订单。对于有序地图,您可以使用TreeMap或LinkedHashMap
TreeMap API表示地图是根据其键的自然顺序排序的,或者是在地图创建时提供的比较器,具体取决于使用的构造函数。
答案 2 :(得分:1)
对于将其键保持在原始插入顺序中的Map
,请使用LinkedHashMap
。
对于将其键保持为排序顺序(自然顺序或通过您传递Comparator
的Map
),请使用TreeMap
或{{ 3}}。如果是多线程,请使用第二个。
对于其中键为枚举的Map
,如果要按枚举对象的定义顺序排序的条目,请使用ConcurrentSkipListMap
。
与Java 11捆绑在一起的其他六个Map
实现对它们的条目不承诺任何顺序。
请参阅我的此图形表作为概述。
答案 3 :(得分:0)