java - 替换 HashSet 内容而不创建新的 HashSet 对象

标签 java collections hashset

我必须操作存在于大 HashSet 对象下的字符串 我想知道是否有可能操纵现有的 不创建新 HashSet 对象的 HashSet 对象

以下是我当前的逻辑,其中,我想避免创建第二个 HashSet(set2 对象)。

HashSet<String> set1 = new HashSet<String>();
set1.add("AB.12");
set1.add("CD.34");
set1.add("EF.56");
set1.add("GH.78");

HashSet<String> set2 = new HashSet<String>();
for(String data : set1) {
    set2.add(data.substring(0,2));
}

P.S.:选择 Set 的原因是为了避免重复条目(来自不同来源)。

最佳答案

不应更改 HashSet 中的元素以保持集合的完整性。您可以将它们视为不可变元素。

并且由于 HashSet 的顺序未定义或随时间保持不变,因此不可能在不与新元素发生冲突的情况下同时添加和删除元素。

但是,如果您想节省内存,您可以同时从 set1 中删除并添加到 set2。

Iterator iter = set1.iterator();

while(iter.hasNext()){
    set2.add(iter.next().substring(0, 2));
    iterator.remove();
}

关于java - 替换 HashSet 内容而不创建新的 HashSet 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32784530/

相关文章:

java - Array<T>.class 的表达方式

mongodb - 获取所选文档在集合中的位置 [mongoDB]

java - HashSet - 如何搜索

java - hashSet 如何接纳元素

java - 使用 Lucene MultiFieldQueryParser 处理多个必填字段

java - 如何创建一个以 Class 对象作为类型参数的 Java 泛型对象?

java - 日期JSON解析形式

java - 使用 xstream 自定义 java 集合的序列化

java - Guava 的 ImmutableSet 成员方法是否模仿 java.util.HashSet#contains?

java - 如果在 Java 8 中流之前集合为 null,如何返回 false?