set接口
定义:
不包含重复元素的集合。 更正式地,集合不包含一对元素e1和e2 ,使得e1.equals(e2) ,并且最多一个空元素。 正如其名称所暗示的那样,这个接口模拟了数学集抽象。
- set接口的特点:无序、无下标、元素不能重复
set接口的方法全部继承自Collection,详细参考Collection接口
HashSet
定义:
此类实现Set接口,由哈希表(实际为HashMap实例)支持。 对set的迭代次序不作任何保证; 特别是,它不能保证顺序在一段时间内保持不变。 这个类允许null元素。
HashSet实现元素不重复的原理
1.什么是重复的数据?
public class SetCollection {
public static void main(String[] args){
HashSet<String> hashSet = new HashSet<>();
hashSet.add("A");
hashSet.add("B");
hashSet.add("C");
hashSet.add("D");
hashSet.add("E");
hashSet.add("A");
for(String s :hashSet){
System.out.println(s);
}
}
}
显而易见,上面程序打印结果为
那么对于程序编译器来说,A
显然时具有重复对象的,因此程序运行结果输出为一个A
,而非两个A
,那么对于A来说,究竟是第二个重复的对象被删除了呢?还是把第一个对象给覆盖了呢?我们可以用add()
方法返回值验证一下。
方法 | 描述 |
---|---|
boolean add(E e) | 将指定的元素添加到此集合(如果尚未存在)。 |
修改代码如下:
public class SetCollection {
public static void main(String[] args){
HashSet<String> hashSet = new HashSet<>();
System.out.println(hashSet.add("A"));
hashSet.add("B");
hashSet.add("C");
hashSet.add("D");
hashSet.add("E");
System.out.println(hashSet.add("A"));
for(String s :hashSet){
System.out.println(s);
}
}
}
打印结果如下:
- 结论:
第一次插入A
元素是成功的,当第二此插入A
时,程序编辑器报错了,因为它识别出这是一个重复的对象,因此拒绝插入集合。
2.HashSet怎么识别重复数据?
还是以代码为例&#x