Java中WeakHashMap containsValue()方法
在了解Java中的WeakHashMap集合时,我们需要重点关注它的key值,因为这个key值不仅是一个普通的对象,还承担了“神奇”的弱引用功能。但今天我们关注的是这个集合中的一个方法——containsValue()。
containsValue()方法的意义
containsValue()方法的意义非常明显,就是用来判断一个value值是否存在于集合中,如果存在则返回true,反之返回false。
不过在这里要提醒大家一点,即从性能上考虑,containsValue()方法并不是很高效。原因是它遍历整个集合,每次比对value值是否相等,所以当集合中存放的数据比较多时,containsValue()方法会耗费较多系统资源。
示例
下面我将用示例来演示一下containsValue()方法的使用。
假设有一个Student类如下:
public class Student {
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Student student = (Student) obj;
return id == student.id &&
Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
}
接下来我们创建一个WeakHashMap实例,并将Student实例插入其中:
WeakHashMap<Integer, Student> map = new WeakHashMap<>();
map.put(1, new Student(1001, "张三"));
map.put(2, new Student(1002, "李四"));
此时,我们可以用containsValue()方法来判断集合中是否存在某个value值:
Student student = new Student(1001, "张三");
System.out.println(map.containsValue(student)); // true
可以看到,containsValue()方法返回了true,说明集合中确实存在一个value值与我们传入的对象相等。
再看下面的示例:
Student student = new Student(1003, "王五");
System.out.println(map.containsValue(student)); // false
此时,containsValue()方法返回了false,说明集合中不存在与我们传入的对象相等的value值。
总结
综上所述,containsValue()方法的作用非常简单,就是用来判断集合中是否存在某个value值。但是由于其遍历整个集合的性能问题,我们在写代码时要慎用,尤其是集合中的数据比较多时。
在实际使用中,我们可以使用其他高性能的方式来处理,例如使用双向映射集合库Guava中的BiMap或者使用数据库等外部存储来管理数据。
当然,如果集合中的数据比较少,containsValue()方法还是比较实用的,毕竟它非常简单易用。