【发布时间】:2019-05-10 10:47:11
【问题描述】:
List<String> myList = new ArrayList<String>();
myList.add("A");
myList.add("B");
myList.add("C");
myList.add("D");
//Output is [A, B, C, D]
Set<String> mySet = new HashSet<String>();
mySet.add("A");
mySet.add("AB");
mySet.add("AC");
mySet.add("AD");
mySet.add("AE");
//输出为AB、AC、A、AE、AD
//然后我把这个集合复制到另一个ArrayList中得到这个。
List<String> myList2 = new ArrayList<String>(mySet);
System.out.println(myList2);
//输出为[ AB, AC, A, AE, AD]
为什么顺序是一样的?我知道无法预测 myList2 的顺序,因为它是从集合中复制的,我想知道为什么输出与集合相同。
【问题讨论】:
-
Set是无序的这一事实并不意味着它会在您每次迭代时以不同的随机顺序迭代其元素。它以特定顺序返回元素(在本例中为 AB、AC、A、AE、AD),但您无法预测顺序是什么。 -
这可能是因为您添加的五个字符串恰好按迭代器使用的某种顺序存储。但是,这种行为并不能保证,并且在 JVM 上可能会有所不同,并且可能会随着您添加/删除元素而改变。阅读Iteration order of HashSet了解更多信息。