在 Java 中,Set 是不允许重复元素的集合,复制 Set 的元素常见有以下几种方式,取决于你是否需要浅拷贝 / 深拷贝,以及使用哪种 Set 实现。
这是最简单、最常用的方式。
Set<String> set1 = new HashSet<>();
set1.add("A");
set1.add("B");
Set<String> set2 = new HashSet<>(set1);
✅ 特点:
SetHashSet、TreeSet、LinkedHashSetaddAll() 复制Set<String> set1 = new HashSet<>();
set1.add("A");
set1.add("B");
Set<String> set2 = new HashSet<>();
set2.addAll(set1);
✅ 效果与构造方法相同
✅ 适合已有目标 Set 的情况
Set<String> set1 = Set.of("A", "B");
Set<String> set2 = Set.copyOf(set1);
✅ 特点:
set2 是不可修改的Set 变化,set2 不受影响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()(谨慎使用)| 方式 | 是否新建 Set | 是否浅拷贝 | 是否可修改 |
|---|---|---|---|
new HashSet<>(set) |
✅ | ✅ | ✅ |
addAll() |
✅ | ✅ | ✅ |
Set.copyOf() |
✅ | ✅ | ❌ |
| 深拷贝 | ✅ | ❌ | ✅ |
如果你有具体场景(如多线程、HashSet / TreeSet、元素是否为对象),可以告诉我,我可以给你最合适的复制方式 ✅
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。