在 Java 中,Set 本身是无序的(除了 LinkedHashSet 和 TreeSet),如果你要对 Set 中的元素进行排序,常见做法有下面几种:
TreeSet(自动排序,推荐)TreeSet 本身就会对元素进行排序。
Comparable)Set<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(2);
System.out.println(set); // [1, 2, 3]
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]
✅ 优点:插入即排序
❌ 缺点:不能存 null(默认比较器下)
适用于 HashSet、LinkedHashSet 等。
Set<Integer> set = new HashSet<>();
set.add(3);
set.add(1);
set.add(2);
List<Integer> list = new ArrayList<>(set);
Collections.sort(list);
System.out.println(list); // [1, 2, 3]
List<Integer> sortedList = set.stream()
.sorted()
.collect(Collectors.toList());
Set<Integer> set = new LinkedHashSet<>();
set.add(3);
set.add(1);
set.add(2);
System.out.println(set); // [3, 1, 2]
⚠️ 这只是插入顺序,不是大小排序。
class User implements Comparable<User> {
int age;
User(int age) { this.age = age; }
@Override
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));
或用 Comparator:
Set<User> set = new TreeSet<>(Comparator.comparingInt(u -> u.age));
| 方式 | 是否排序 | 说明 |
|---|---|---|
| HashSet | ❌ | 无序 |
| LinkedHashSet | ❌ | 插入顺序 |
| TreeSet | ✅ | 自动排序 |
| List 排序 | ✅ | 最灵活 |
如果你是 Java 8+ 或某种具体类型(如对象、字符串、Map 的 key),可以告诉我,我给你写更贴合的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。