1.集合深入
(一)hashSet实现原理:
当我们添加一个元素,HashSet会计算出其Hash值,再根据hash值在哈希表中找出存储他的位置
有两种情况:a.如果算出的hash值在哈希表中位置没有存值,就将其直接存在上面
b.如果算出的额hash值在哈希表中已有存值,会调用该元素的equals方法与该位置的元素再比较一次,返回true,一样不添加,false,添加
例子:测试hashSet添加元素的原理,重写了其equals,hashCode
class Person{ int id; String name; public Person(int id, String name) { super(); this.id = id; this.name = name; } @Override public String toString() { return "{ 编号:"+ this.id+" 姓名:"+ this.name+"}"; } @Override public int hashCode() { System.out.println("=======hashCode====="); return this.id; } @Override public boolean equals(Object obj) { System.out.println("======equals======"); Person p = (Person)obj; return this.id==p.id; } } public class Demo2 { public static void main(String[] args) { /* HashSet set = new HashSet(); set.add("狗娃"); set.add("狗剩"); set.add("铁蛋"); System.out.println("集合的元素:"+ set); */ HashSet set = new HashSet(); set.add(new Person(110,"狗娃")); set.add(new Person(220,"狗剩")); set.add(new Person(330,"铁蛋")); //在现实生活中只要编号一致就为同一个人. System.out.println("添加成功吗?"+set.add(new Person(110,"狗娃"))); System.out.println("集合的元素:"+set); } }