在 Java 中使用 contains() 方法判断 Set 集合中是否包含某元素
Set 集合简介
Set 是 Java 中常用的集合类型之一,与 List 集合不同的是,Set 不允许元素重复。Java 中的 Set 接口包含以下几个常用方法:
- add(Object o) :将指定元素添加到 Set 中
- remove(Object o):将指定元素从 Set 中删除
- contains(Object o):判断 Set 中是否包含指定元素
- size():返回 Set 中的元素数量
contains() 方法的使用
在判断一个集合中是否包含某个元素时,可以使用 Set 接口中的 contains() 方法。该方法的返回值为布尔型,若包含指定元素则返回 true,否则返回 false。以下是一个示例代码:
import java.util.HashSet;
import java.util.Set;
public class ContainsMethod {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
if (set.contains("apple")) {
System.out.println("set 中包含 apple");
} else {
System.out.println("set 中不包含 apple");
}
}
}
上述代码中,我们创建了一个包含三种水果的 Set 集合,并使用 contains() 方法判断该集合中是否包含 “apple” 元素。该程序的输出结果为:
set 中包含 apple
可以看到,由于 Set 中包含了 “apple” 元素,故 contains() 方法返回 true。
如何判断自定义类型的元素
在上述示例代码中,集合中的元素均为字符串类型,因此 contains() 方法能够正确地识别这些元素。但是,当集合中的元素是自定义类型时,需要对该类型进行特殊处理才能够正确地使用 contains() 方法。以下是一个示例代码,使用自定义类型作为 Set 集合的元素:
import java.util.HashSet;
import java.util.Set;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return getAge() == person.getAge() &&
Objects.equals(getName(), person.getName());
}
@Override
public int hashCode() {
return Objects.hash(getName(), getAge());
}
}
public class ContainsCustomType {
public static void main(String[] args) {
Set<Person> set = new HashSet<>();
set.add(new Person("Alice", 22));
set.add(new Person("Bob", 25));
set.add(new Person("Charlie", 30));
Person targetPerson = new Person("Alice", 22);
if (set.contains(targetPerson)) {
System.out.println("set 中包含 " + targetPerson.getName());
} else {
System.out.println("set 中不包含 " + targetPerson.getName());
}
}
}
在上述代码中,我们创建了一个包含三个 Person 类型对象的 Set 集合,并将其中的一个对象(名为 “Alice”,年龄为 22 岁)作为搜索目标。这里需要注意的是,如果希望 contains() 方法能够正确地识别自定义类型的元素,需要为该类型重写 equals() 和 hashCode() 方法。
equals() 方法用于判断两个类型对象在逻辑上是否相同。当需要判断两个对象是否相等时,Java 会调用 equals() 方法。在上述代码中,我们重写了 Person 类型的 equals() 方法,使其在判断两个 Person 对象是否相等时只考虑姓名和年龄是否相同。
hashCode() 方法用于返回对象的哈希码值。哈希码值是 Java 中的一个整型值,被用于快速查找集合中的元素。在上述代码中,我们同样重写了 Person 类型的 hashCode() 方法,使其在计算哈希码值时只考虑姓名和年龄两个成员变量。
运行上述程序,输出结果如下:
set 中包含 Alice
可以看到,由于 Set 中包含名为 “Alice”,年龄为 22 岁的对象,故 contains() 方法返回 true。
结论
- 使用 Set 接口中的 contains() 方法能够判断一个集合中是否包含指定的元素
- 当集合中的元素为自定义类型时,需要重写该类型的 equals() 和 hashCode() 方法,以保证 contains() 方法能够正确地识别元素