温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Set排序怎么做

发布时间:2026-10-25 21:11:31 来源:亿速云 阅读:99 作者:小樊 栏目:编程语言

在 Java 中,Set 本身是无序的(除了 LinkedHashSet 和 TreeSet),如果你要对 Set 中的元素进行排序,常见做法有下面几种:


一、使用 TreeSet(自动排序,推荐)

TreeSet 本身就会对元素进行排序。

1. 自然排序(元素实现 Comparable)

Set<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(2);

System.out.println(set); // [1, 2, 3]

2. 自定义排序(使用 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(默认比较器下)


二、把 Set 转成 List 再排序(最常用)

适用于 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]

使用 Java 8 Stream

List<Integer> sortedList = set.stream()
        .sorted()
        .collect(Collectors.toList());

三、LinkedHashSet 保持插入顺序(不是排序)

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),可以告诉我,我给你写更贴合的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手