面试题答案
一键面试Set集合实现数据唯一性的原理
Set集合是基于对象的hashCode
值和equals
方法来实现数据唯一性的。当向Set集合中添加元素时,首先会调用该元素的hashCode
方法获取其哈希码,通过哈希码计算出元素在集合中的存储位置。如果该位置没有其他元素,那么直接将元素添加进去;如果该位置已有元素,就会调用新元素与已有元素的equals
方法进行比较,如果equals
方法返回true
,则认为这两个元素是重复的,不会将新元素添加进去;如果equals
方法返回false
,则会在该位置以链表或其他方式存储新元素(对于哈希表实现的Set集合,如HashSet
)。
使用HashSet进行一组整数的唯一性校验示例
import java.util.HashSet;
import java.util.Set;
public class IntegerUniquenessCheck {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
int[] numbers = {1, 2, 3, 2, 4, 3};
for (int number : numbers) {
boolean added = set.add(number);
if (!added) {
System.out.println(number + " 是重复的元素");
}
}
System.out.println("唯一的元素集合: " + set);
}
}
在上述代码中,创建了一个HashSet
,遍历整数数组,使用add
方法向HashSet
中添加元素。如果add
方法返回false
,说明该元素是重复的。
HashSet在判断元素是否重复时底层依赖的关键方法
hashCode
方法:用于获取对象的哈希码,该哈希码用于在哈希表中确定元素的存储位置。不同对象的哈希码尽可能不同,以减少哈希冲突。equals
方法:当两个对象的哈希码相同时(即发生哈希冲突),会调用equals
方法来判断这两个对象是否相等。如果equals
方法返回true
,则认为这两个对象是重复的。在自定义类作为HashSet
元素时,需要重写hashCode
和equals
方法,以确保唯一性判断的正确性。