Set集合中元素是無序的,不能夠重複,在Set集合中存儲的對象,不存在兩個對象equals比較爲true的狀況。
java
1)HashSet和TreeSet是Set集合中的兩個實現類,分別用hash表和二叉樹的方式實現Set集合,HashSet是經過散列集合實現Set的。
算法
2)Set集合中沒有get(int index)方法,不能像在List集合中,經過下標去獲得對應的元素。若是想要的到元素,則使用Iterator迭代器。
spa
3)向Set集合中添加元素 能夠使用add()方法,可是增長的元素不會再集合末尾添加,由於Set集合中元素是無序的。code
Set<String> set = new HashSet<String>() ; //多態 set.add("a"); set.add("b"); set.add("c"); //普通循環,使用Iteraotr迭代器迭代 Iterator it = (String)set.iterator() ; while(it.hasNext()){ String str = (String)it.next() ; System.out.println(str) ; } //加強for循環遍歷Set集合 for(String str:set){ System.out.println(str) ; }
4)hashCode對HashSet的影響。若是咱們不重寫hashCode,那麼咱們使用的就是Object提供的,而該方法是返回地址。也就是不一樣的對象,hashCode不一樣。
對象
5)對於重寫了equals方法的對象,強烈要求重寫繼承自Object類的hashCode方法,由於是否重寫hashCode方法對操做集合有影響。
繼承
6)重寫hashCode須要注意兩點:
get
①與equals方法的一致性,經過equals方法比較返回爲true的對象,其hashCode的方法返回的對象一致。
hash
②hashCode方法返回的值應該符合hash算法要求。
it
7)boolean contains(Object obj)方法:查看對象是否存在Set集合中。for循環
Set<Point> set = new HashPoint<Point>() ; //Point point = new Point(1,2) ; set.add(point) ; set.add(new Point(1,2)); set.add(new Point(3,4)); System.out.println(set.contains(new Point(1,2)));
8)
Set<Point> set= new HashSet<Point>() ; Point p1 = new Point(1,2); Point p2 = new Point(3,4); System.out.println("兩個對象是不是一個對象"+(p1==p2)); System.out.println("兩個對象內容是否相同"+(p1.equals(p2))); System.out.println("兩個對象hashCode是否相同"+(p1.hashCode()==p2.hashCode())); set.add(p1); set.add(p2); System.out.println("hashSet集合中元素個數"+set.size()) ; for(Point p:set){ System.out.println(p) ; }
9)Set集合中保存不一樣對象時,不會保存既hashCode()相同又equals相同的對象,缺一不可,不然HashSet不認爲他們是重複的值。