1 HashSet是主要的實現類,Set中常用的方法都是Collection下定義的。
2 無序性:無序性!=隨機性。指元素在底層存儲的位置是無序的
不可重復性:加入相同元素時,后面的元素不能加入進去
3 注意:要求加進Set中的元素,一定要重寫equals和hashCode方法
才能保證Set中元素的不可重復性。
4 Set中元素如何存儲的?使用哈希算法,如同安排學生坐在教室的不同位置,元素存放在內存的不同位置。
5 當向Set中添加對象時,首先調用此對象所在類的hashCode(),計算此對象的哈希值,此哈希值決定了此對象在Set中的存儲位置。若此位置沒有對象存儲,則這個對象直接存儲在此位置,若此位置已有對象存儲,再通過equals()比較兩個對象是否相同,如果相同,后面的元素不能添加進來。
要求:hashcode()方法值與equals方法一致。
package lianxi2; import java.util.HashSet; import java.util.Set; import org.junit.Test; public class TestSet { @Test public void test1(){ Set set = new HashSet(); set.add(23); set.add(55); set.add(new String("AA")); //重寫了equals和hashcode方法 set.add(new String("AA")); Student stu1 = new Student("001","xi"); //沒重寫時,用object的equals方法比較的是地址值 Student stu2 = new Student("001","xi"); //重寫后,后面元素不能添加了 System.out.println(stu1.hashCode()); System.out.println(stu2.hashCode()); set.add(stu1); set.add(stu2); System.out.println(set.size()); System.out.print(set); } }
結果:
1482401
1482401
4
[AA, 55, 23, Student [id=001, name=xi]]
