按相反顺序对Set进行排序

为新手问题道歉,但是以相反的顺序获取Set (比如LinkedHashSet )的正确方法是什么? 对于Collection s,有Collections.reverse(Collection c) ,但是如何为具有有序元素的Set (如LinkedHashSet )执行此操作?

集合通常不是有序的,因此为了保留排序,在将集合排序为列表之后,您需要使用Set的已知迭代顺序实现,例如LinkedHashSet

 List list = new ArrayList(set); Collections.sort(list, Collections.reverseOrder()); Set resultSet = new LinkedHashSet(list); 

您也可以将TreeSet与比较器一起使用,但这并不像上面的ArrayList方法那么快。

 public class LargestArray { public static void main(String[] args) { ArrayList al = new ArrayList<>(); Set set = new TreeSet<>(); set.add(10); set.add(20); set.add(7); set.add(4); set.add(1); set.add(2); set.add(3); set.add(4); System.out.println("after Sorting"); for(int i : set) { System.out.print(" " + i); } al.addAll(set); set.clear(); Collections.reverse(al); System.out.println(); System.out.println("After Reverse"); for (int i : al) { System.out.print(" " + i); } } } 

output = after Sorting 1 2 3 4 7 10 20 Reverse 20 10 7 4 3 2 1

看一下这个

http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#descendingSet()

如果使用TreeSet,则可以通过调用descendingSet来获得相反的顺序。

我将以一个例子向您解释。 在代码中间添加注释以便更好地理解。

 public class ReverseLinkedHashSet { public static void main(String[] args) { // creating a LinkedHashSet object which is // of type String or any. Will take a example of String. HashSet cars = new LinkedHashSet(); // adding car elements to LinkedHashSet object as below cars.add("Toyato"); cars.add("Hundai"); cars.add("Porshe"); cars.add("BMW"); // Iterating using enhanced for-loop to see the order. System.out.println("Insertion Order: Iterating LinkedHashSet\n"); for(String car : cars) { System.out.println(car); // Output will be as below //Toyato //Hundai //Porshe //BMW } // Now convert to ArrayList to rearrange to reverse // the linkedHashset List listOfCars = new ArrayList(cars); // to reverse LinkedHashSet contents Collections.reverse(listOfCars); // reverse order of LinkedHashSet contents // can be done as below System.out.println("\n\n\nReverse Order of LinkedHashSet\n"); for(String car : listOfCars) { System.out.println(car); // Output will be as below //BMW //Porshe //Hundai //Toyato } } } 

另外,我建议不要在没有强烈理由的情况下使用LinkedhashSet 。 对于复杂的应用程序,它会降低性能。 请改用HashSet