如何sortingHashSet?

对于列表,我们使用Collections.sort(List)方法。 如果我们想要对HashSet进行sorting呢?

HashSet不保证其元素的任何顺序。 如果你需要这个保证,考虑使用TreeSet来保存你的元素。

但是,如果您只需要为这一个事件sorting的元素,那么只需临时创build一个List并对其进行sorting:

 Set yourHashSet = new HashSet(); ... List sortedList = new ArrayList(yourHashSet); Collections.sort(sortedList); 

将所有对象添加到TreeSet,您将得到一个有序的Set。 下面是一个原始的例子。

 HashSet myHashSet = new HashSet(); myHashSet.add(1); myHashSet.add(23); myHashSet.add(45); myHashSet.add(12); TreeSet myTreeSet = new TreeSet(); myTreeSet.addAll(myHashSet); System.out.println(myTreeSet); // Prints [1, 12, 23, 45] 

使用java.util.TreeSet作为实际的对象。 当你迭代这个集合时,这个值会以一个明确的顺序返回。

如果你使用java.util.HashSet那么顺序依赖于一个内部函数,而不是可能不是词法。

您可以改为使用TreeSet 。

在其他答案中可以使用TreeSet。

以下是关于如何使用它的一些细节:

 TreeSet<String> ts = new TreeSet<String>(); ts.add("b1"); ts.add("b3"); ts.add("b2"); ts.add("a1"); ts.add("a2"); System.out.println(ts); for (String s: ts) System.out.println(s); 

输出:

 [a1, a2, a3, a4, a5] a1 a2 b1 b2 b3 

Java 8的sorting方式是:

 fooHashSet.stream() .sorted(Comparator.comparing(Foo::getSize)) //comparator - how you want to sort it .collect(Collectors.toList()); //collector - what you want to collect it to 

* Foo::getSize这是一个例子,如何根据大小自然地对YourItem的HashSet进行sorting。

* Collectors.toList()将收集sorting结果到List中,您将需要使用List<Foo> sortedListOfFoo =捕获它List<Foo> sortedListOfFoo =

HashSet中的元素无法sorting。 每当你把元素放到HashSet中,就会弄乱整个桶。 关于它的好处是性能的效率。

每次插入元素时,TreeSet都会自动对所有元素进行sorting。

也许,你要做的只是sorting一次。 在这种情况下,TreeSet不是最好的select,因为它需要一直确定添加新元素的位置。

最有效的解决scheme是使用ArrayList。 创build一个新的列表,并添加所有的元素,然后sorting一次。 如果你只想保留唯一的元素(删除所有的重复项,比如set,那么把这个列表放到一个LinkedHashSet中,它将保留你已经sorting的顺序)

 List<Integer> list = new ArrayList<>(); list.add(6); list.add(4); list.add(4); list.add(5); Collections.sort(list); Set<Integer> unique = new LinkedHashSet<>(list); // 4 5 6 // The above line is not copying the objects! It only copies references. 

现在,你已经得到了一个有序集,如果你想以列表的forms,然后将其转换为列表。

你可以通过以下方式来做到这一点:

方法1:

  1. 创build一个列表并存储所有的哈希值
  2. 使用Collections.sort()对列表进行sorting
  3. 将列表存储回LinkedHashSet,因为它保留了插入顺序

方法2:

  • 创build一个treeSet并将所有的值存储到它。

方法2是更优选的,因为其他方法在哈希集和列表之间消耗大量时间来传输数据。

 1. Add all set element in list -> al.addAll(s); 2. Sort all the elements in list using -> Collections.sort(al); public class SortSetProblem { public static void main(String[] args) { ArrayList<String> al = new ArrayList(); Set<String> s = new HashSet<>(); s.add("ved"); s.add("prakash"); s.add("sharma"); s.add("apple"); s.add("ved"); s.add("banana"); System.out.println("Before Sorting"); for (String s1 : s) { System.out.print(" " + s1); } System.out.println("After Sorting"); al.addAll(s); Collections.sort(al); for (String set : al) { System.out.print(" " + set); } } } 

input – ved prakash sharma苹果ved香蕉

产量 – 苹果香蕉prakash sharma ved

你可以使用相同的番石榴库

 Set<String> sortedSet = FluentIterable.from(myHashSet).toSortedSet(new Comparator<String>() { @Override public int compare(String s1, String s2) { // descending order of relevance //required code } }); 

我们不能决定HashSet的元素会自动sorting。 但是我们可以通过转换成TreeSet或ArrayList或LinkedList等任何列表来对它们进行sorting。

 // Create a TreeSet object of class E TreeSet<E> ts = new TreeSet<E> (); // Convert your HashSet into TreeSet ts.addAll(yourHashSet); System.out.println(ts.toString() + "\t Sorted Automatically"); 

这个简单的命令为我做了诡计:

 myHashSet.toList.sorted 

我在一个打印语句中使用了这个,所以如果你需要实际的持久化顺序,你可能需要使用TreeSets或其他在这个线程上提出的结构。