2 HashSet 无序 不可重复
HashSet 子类使用最多一个子类, 无序 ,不可重复
观察HashSet定义
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, Serializable |
范例:使用HashSet
public static void main(String[] args) { Set<String> all=new HashSet<>(); all.add("hello"); all.add("world"); all.add("hadoop"); all.add("hive"); all.add("hbase"); all.add("hello"); all.add("hello"); for(String str:all) {
System.out.println(str); } } |
使用HashSet 判断重复元素依据 是 hashCode 和 equals()方法
hashCode是什么意思?
哈希表: 字典表 k v hashcode意思通过一些运算把复杂的对象,主键, 转换为数组的下标 arrayindex 进行存储
HashCode的设计原理主要三大特性:
1 确定的 对象.hashCode 该对象无论调用多少次这个hashCode方法得出的结果 一定是一样的
2 高效的 哈希算法一定不能是复杂的
3 均匀分布的
K hash V
A 2 zxy
B 0 pqr
C 3 ijk
D 2 uvm
通过了解hashCode的原理,以及为什么在HashSet 中元素是无序的, 以及为什么依靠HashCode 和equals()方法来判断重复元素
范例:使用自定义类完成HashSet的使用
public static void main(String[] args) {
Set<Person> all=new HashSet<>(); all.add(new Person("张三",20)); all.add(new Person("李四",30)); all.add(new Person("隔壁老王",89)); for(Person per:all) {
System.out.println(per); } } |