为新手问题道歉,但是以正确的方式获得Set
(说LinkedHashSet
)的顺序是什么?对于Collection
,有Collections.reverse(Collection c)
,但是对于具有有序元素的Set
(如LinkedHashSet
),如何做到这一点?
答案 0 :(得分:14)
一般不对集合进行排序,因此为了保留排序,在将集合排序为列表之后,您需要使用Set的已知迭代顺序实现,例如LinkedHashSet
List list = new ArrayList(set);
Collections.sort(list, Collections.reverseOrder());
Set resultSet = new LinkedHashSet(list);
您也可以将TreeSet与比较器一起使用,但这并不像上面的ArrayList方法那么快。
答案 1 :(得分:1)
public class LargestArray {
public static void main(String[] args) {
ArrayList<Integer> al = new ArrayList<>();
Set<Integer> 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);
}
}
}
输出=排序后 1 2 3 4 7 10 20 反转后 20 10 7 4 3 2 1
答案 2 :(得分:0)
检查出来
http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#descendingSet()
如果您使用TreeSet,则可以通过调用descendingSet来获得相反的顺序。
答案 3 :(得分:0)
我将以一个例子向您解释。在代码中间添加了注释,以便更好地理解。
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<String> cars = new LinkedHashSet<String>();
// 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<String> listOfCars = new ArrayList<String>(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
。
答案 4 :(得分:0)
Java 8,我在下面使用解决方案,
Set<String> setTest = new HashSet<>();
setTest.add("1");
setTest.add("2");
setTest.add("3");
List<String> list = new ArrayList<>(setTest);
list.sort(Collections.reverseOrder());
Set<String> result = new LinkedHashSet<>(list);
for (String item: result) {
System.out.println("---> " + item);
}
Result:
---> 3
---> 2
---> 1
为我工作。