我编写了一个简单的程序,它接受一个字符串数组,将其转换为列表,然后转换为集合,最后打印出来。 这是代码:
public static void main(String[] args) {
String[] array = {"hello", "goodbye", "welcome", "thanks"};
List<String> list = Arrays.asList(array);
System.out.println(list);
Set<String> set = new HashSet<String>(list);
System.out.println(set);
}
套装回归 [你好,再见,欢迎,谢谢] [你好,谢谢,再见,欢迎]
无论我创建数组的顺序是什么,它都会以特定的顺序返回 Set。那么 Set<> 如何确定值应该按什么顺序放入呢?
Set 中元素的顺序由其
Iterator
中元素的顺序决定,并且如 Set.iterator() 中所指定
返回的元素没有特定的顺序(除非该集合是某个提供保证的类的实例)。
因此
Set
没有固有的顺序。
然而,
Set
只是一个interface
。 Set
有多种实现,do提供了保证。
O(1)
,但代价是可预测的顺序。enum
序数顺序排序 - 有点像 TreeSet
。
ConcurrentSkipListSet
和 TreeSet
类由 SortedSet
和 NavigableSet
接口表示。
在 Java 21+ 中,通过顺序集合,
SequencedSet
接口涵盖三个类:ConcurrentSkipListSet
、LinkedHashSet
、TreeSet
。
HashSet
的迭代顺序是一个实现细节,可能会因版本而异。您应该假设该顺序是神奇的、难以理解的,并且可能会发生变化。
(实际上,它受到元素的哈希码、HashSet内部使用的涂抹函数以及哈希桶出现的顺序的影响。)