在 Java 中,Set 本身是一个无序、不可重复的集合,默认情况下不保证顺序。如果你需要对 Set 中的元素进行排序,通常有以下几种常见方式:
TreeSet(自然排序 / 定制排序)Comparable)Set<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(2);
System.out.println(set); // [1, 2, 3]
TreeSet会按元素的自然顺序排序(如数字从小到大,字符串按字典序)
Comparator)Set<String> set = new TreeSet<>((a, b) -> b.compareTo(a));
set.add("apple");
set.add("banana");
set.add("cherry");
System.out.println(set); // [cherry, banana, apple]
Set 转为 List 再排序(最常用)适用于 HashSet、LinkedHashSet 等本身无序的 Set。
Set<Integer> set = new HashSet<>();
set.add(3);
set.add(1);
set.add(2);
List<Integer> list = new ArrayList<>(set);
list.sort(Integer::compareTo);
System.out.println(list); // [1, 2, 3]
或使用 Collections.sort:
Collections.sort(list);
Set<Integer> set = new HashSet<>();
set.add(3);
set.add(1);
set.add(2);
List<Integer> sortedList = set.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(sortedList); // [1, 2, 3]
倒序:
set.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
class User implements Comparable<User> {
int age;
User(int age) { this.age = age; }
public int compareTo(User o) {
return Integer.compare(this.age, o.age);
}
}
Set<User> set = new TreeSet<>();
set.add(new User(30));
set.add(new User(20));
| 方式 | 是否改变原 Set | 是否自动排序 | 适用场景 |
|---|---|---|---|
| TreeSet | 是 | ✅ | 需要持续有序 |
| List + sort | 否 | ❌ | 一次性排序 |
| Stream | 否 | ❌ | 函数式、链式处理 |
如果你有具体类型(Integer / String / 自定义对象)或使用场景,我可以给你更精确的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。