Dia*_*ana 92 java sorting collections set hashset
对于列表,我们使用该Collections.sort(List)方法.如果我们想要排序HashSet怎么办?
isa*_*ert 104
HashSet不保证其元素的任何顺序.如果您需要此保证,请考虑使用TreeSet来保存元素.
但是,如果您只需要为这一次出现排序的元素,那么只需临时创建一个List并对其进行排序:
Set<?> yourHashSet = new HashSet<>();
...
List<?> sortedList = new ArrayList<>(yourHashSet);
Collections.sort(sortedList);
Run Code Online (Sandbox Code Playgroud)
Abd*_*han 58
将所有对象添加到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]
Run Code Online (Sandbox Code Playgroud)
P45*_*ent 14
使用java.util.TreeSet作为实际的对象.迭代此集合时,值将以明确定义的顺序返回.
如果你使用java.util.HashSet那么顺序取决于内部有功能,很可能不是词法.
Laz*_*ana 13
Java 8的排序方式是:
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
Run Code Online (Sandbox Code Playgroud)
*Foo::getSize这是一个如何按大小自然地对YourItem的HashSet进行排序的示例.
*Collectors.toList()将收集排序到List中的结果,您将需要捕获它List<Foo> sortedListOfFoo =
Ank*_*rma 10
以防万一你不想使用a,TreeSet你可以尝试使用java流来获得简洁的代码。
set = set.stream().sorted().collect(Collectors.toCollection(LinkedHashSet::new));
Run Code Online (Sandbox Code Playgroud)
HashSet 中的元素无法排序。每当您将元素放入 HashSet 时,它都会弄乱整个集合的顺序。它是为了性能而故意设计的。当你不关心顺序时,HashSet 将是最有效的频繁插入和查询的集合。
TreeSet 是您可以使用的替代方法。当您对树集进行迭代时,您将自动获得已排序的元素。但是每次插入元素时,它都会调整树以尝试保持排序。
也许,您要做的只是排序一次。在这种情况下,TreeSet 不是最有效的选项,因为它需要始终确定新添加元素的放置。仅当您想经常排序时才使用 TreeSet。
如果只需要排序一次,请使用 ArrayList。创建一个新列表并添加所有元素,然后对其进行一次排序。如果你只想保留唯一元素(删除所有重复项),那么将列表放入一个 LinkedHashSet 中,它会保留你已经排序的顺序。
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
Run Code Online (Sandbox Code Playgroud)
现在,如果您希望以列表形式将其转换为列表,则您已经获得了一个排序集。
根据@LazerBanana 给出的答案,我将按对象的 Id 排序我自己的 Set 示例:
Set<Clazz> yourSet = [...];
yourSet.stream().sorted(new Comparator<Clazz>() {
@Override
public int compare(Clazz o1, Clazz o2) {
return o1.getId().compareTo(o2.getId());
}
}).collect(Collectors.toList()); // Returns the sorted List (using toSet() wont work)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
202387 次 |
| 最近记录: |