慕粉0016002461
2017-03-08 09:55
Set集合遍历输出,加到了7个元素,在输入顺序不变的情况下,输出依然与前一次顺序一致。没有发现两次输出不一样。为什么
所谓无序(unordered),就是 Java 语言没有规定 HashSet 按什么顺序遍历。你应该知道,有好多种 Java 虚拟机。有的运行在Windows上,有的运行在 Linux上。即使在同一个平台上,也会有好几种虚拟机。每种虚拟机对 HashSet的实现都是不一样的,所以每种虚拟机对 HashSet 的遍历顺序可能都不太一样。但对同一种虚拟机来说,你的遍历输出都是一样的。 Java 是跨派台的,你写的程序可能会在不同的平台上运行,这些平台上的虚拟机都是不一样的。如果你选用了 HashSet,就要明白,在不同的平台上,遍历顺序可能会不一样。如果你对遍历顺序有要求,就要考虑使用有序的,或排序的容器。
有序(ordered),就是 Java 规定了容器的遍历顺序。这个顺序就是你在容器中加入元素的顺序。LinkedHashSet就是一个有序的容器。不同的虚拟机可以用不同的方法来实现,但都得保证遍历的顺序跟加入元素的顺序一致。
排序(sorted)。对这样的容器,不管你加入元素的顺序是什么样的,遍历都是排好序的。比如你的容器里存的是 Integer,你先加入 5,然后又加入了 1,3, 9。最后的遍历顺序是 1,3,5,9。这样的容器是使用 Comparable 或 Comparator来对元素进行排序的。TreeSet就是一个排序容器。
你在程序中把 HashSet 换成 LinkedHashSet 或 TreeSet 试试,看输出有什么变化。
Java入门第三季
409792 学习 · 4340 问题
相似问题
回答 4
回答 14