温馨提示×

温馨提示×

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

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

如何复制Set集合元素

发布时间:2026-07-24 12:53:21 来源:亿速云 阅读:103 作者:小樊 栏目:编程语言

在 Java 中,Set 是不允许重复元素的集合,复制 Set 的元素常见有以下几种方式,取决于你是否需要浅拷贝 / 深拷贝,以及使用哪种 Set 实现。


一、最常用的复制方式(推荐)

✅ 1. 使用构造方法(浅拷贝)

这是最简单、最常用的方式。

Set<String> set1 = new HashSet<>();
set1.add("A");
set1.add("B");

Set<String> set2 = new HashSet<>(set1);

✅ 特点:

  • 会创建一个新的 Set
  • 元素是浅拷贝(引用相同)
  • 适用于 HashSet、TreeSet、LinkedHashSet

二、使用 addAll() 复制

Set<String> set1 = new HashSet<>();
set1.add("A");
set1.add("B");

Set<String> set2 = new HashSet<>();
set2.addAll(set1);

✅ 效果与构造方法相同
✅ 适合已有目标 Set 的情况


三、复制为不可修改 Set(Java 9+)

Set<String> set1 = Set.of("A", "B");

Set<String> set2 = Set.copyOf(set1);

✅ 特点:

  • set2 是不可修改的
  • 如果原 Set 变化,set2 不受影响
  • 仍然是浅拷贝

四、复制为指定类型的 Set

Set<String> set1 = new HashSet<>();
set1.add("A");

SortedSet<String> set2 = new TreeSet<>(set1);

✅ 用于类型转换(如 HashSet → TreeSet)


五、深拷贝(对象元素)

⚠️ Set 本身没有深拷贝机制,如果元素是对象,需要手动处理。

示例:对象深拷贝

class User {
    String name;
    User(String name) { this.name = name; }
}

Set<User> set1 = new HashSet<>();
set1.add(new User("Tom"));

Set<User> set2 = new HashSet<>();
for (User u : set1) {
    set2.add(new User(u.name)); // 手动复制对象
}

✅ 如果对象较复杂,可使用:

  • 拷贝构造方法
  • clone()(谨慎使用)
  • 序列化 / 第三方工具(如 Apache Commons、Jackson)

六、总结对比

方式 是否新建 Set 是否浅拷贝 是否可修改
new HashSet<>(set) ✅ ✅ ✅
addAll() ✅ ✅ ✅
Set.copyOf() ✅ ✅ ❌
深拷贝 ✅ ❌ ✅

如果你有具体场景(如多线程、HashSet / TreeSet、元素是否为对象),可以告诉我,我可以给你最合适的复制方式 ✅

向AI问一下细节

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

AI
助
手