在java中按值对哈希集排序
HashSet中是否有一种方法允许它自己排序,而不是编写算法来排序?我知道文档中有一个迭代器,但它实际上是如何实现的?HashSet的迭代器没有排序,因为它只是按原样输出容器。事实上,更改类的实现、负载因子或任何其他参数几乎总是会更改迭代器的顺序。但是,您可以将设置值包装在在java中按值对哈希集排序,java,sorting,hashset,Java,Sorting,Hashset,HashSet中是否有一种方法允许它自己排序,而不是编写算法来排序?我知道文档中有一个迭代器,但它实际上是如何实现的?HashSet的迭代器没有排序,因为它只是按原样输出容器。事实上,更改类的实现、负载因子或任何其他参数几乎总是会更改迭代器的顺序。但是,您可以将设置值包装在列表中,并使用集合排序(列表)或集合排序(列表,比较器): 导入java.util.array; 导入java.util.Collections; 导入java.util.HashSet; ... HashSet为什么不直接使
列表中
,并使用集合排序(列表)
或集合排序(列表,比较器)
:
导入java.util.array;
导入java.util.Collections;
导入java.util.HashSet;
...
HashSet为什么不直接使用TreeSet
AHashSet
没有顺序。这在javadoc.或a中有明确的说明,它是为迭代而设计的。将其元素添加到列表中并对其排序。可能老师不明白他们在问什么。这会不会弄乱集合中的任何重复项?@user2920965据我所知不会,但请阅读文档以确保。待定+1,但是这个例子没有编译Collection#toArray
返回一个Object[]
,并且Object
不可比较,因此无法对其排序。您需要传入正确类型的数组。请注意,由于擦除,您无法将数组创建为newt[]
。@yshavit。我不打算编译这个例子,因为那样只会分散对答案的注意力。但是,关于没有指定正确的输出类型,这一点很好。@yshavit我知道您不会允许我发布一个仓促捏造的答案。我很感激。
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
...
HashSet<? extends Comparable> myHashSet = ...;
...
List<? extends Comparable> sortedList = Arrays.asList(myHashSet.toArray(new Comparable[0]));
Collections.sort(sortedList);