Java中的HashSet removeAll()方法及示例
介绍
HashSet是Java中的一个集合类,可以存储不重复的元素。它实现了Set接口,基于哈希表来实现。
HashSet有一个removeAll()方法,用来从集合中删除另一个集合中的元素。当然,这些元素应该在原集合中存在才能被删除。
语法
public boolean removeAll(Collection<?> c)
参数说明:
– c
: 包含要删除元素的集合。
返回值:
– 如果原集合被修改,那么返回true
,否则返回false
。
示例
假设我们有两个HashSet集合:set1和set2:
Set<Integer> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
Set<Integer> set2 = new HashSet<>();
set2.add(2);
set2.add(3);
set2.add(4);
接下来,我们使用removeAll()方法从set1中删除set2中的所有元素:
boolean removed = set1.removeAll(set2);
System.out.println(removed); // 输出 true
System.out.println(set1); // 输出 [1]
我们可以看到,由于set1中存在set2中的元素2和3,因此removeAll()方法会删除它们,最终set1只包含元素1。
实际应用
下面是一个更实际的示例,假设我们有一个List列表,其中包含两个Student对象。我们想要删除这个List中具有相同名字的Student对象。
Student类的定义如下:
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
// 省略getter和setter方法
}
首先,我们创建这个List:
List<Student> list = new ArrayList<>();
list.add(new Student("Tom", 20));
list.add(new Student("Jerry", 22));
list.add(new Student("Tom", 21));
然后,我们使用HashSet来删除这个List中所有具有相同名字的Student对象:
Set<String> names = new HashSet<>();
List<Student> deleteList = new ArrayList<>();
for (Student student : list) {
if (names.contains(student.getName())) {
deleteList.add(student);
} else {
names.add(student.getName());
}
}
list.removeAll(deleteList);
在这个代码片段中,我们使用了一个HashSet来存储已经遍历过的Student对象的名字。如果当前遍历到的Student对象的名字已经存在于HashSet中,那么说明它是要被删除的对象,我们将它加入到一个deleteList中。否则,我们将当前Student对象的名字加入到HashSet中表示我们已经遍历过它。
最后,我们使用List的removeAll()方法从列表中删除所有在deleteList中的Student对象。
结论
HashSet的removeAll()方法可以用来从集合中删除另一个集合中的元素。在实际应用中,它可以用来从列表中删除所有具有相同属性的对象。