接口Collection:java
Collection是Java的一個集合框架, 也是一個根接口。JDK中沒有提供此接口的任何實現,可是提供了更具體的子接口Set和List接口的實現,全部的Collection實現類都是經過這些子接口間接實現了Collection。node
Collection接口有兩種構造方法,一種用於構造空的Collection,另外一種是帶有Collection類型單參數的構造方法。該接口經常使用的方法包括add(E e),addAll(Collection<?> e),clear(),contains(Object o),equals(Object o),isEmpty(),remove(Object o),size(),toArray(),iterator()等等。算法
經常使用子接口包括List,Set,Queue等。安全
一.Set接口:框架
一個不包含重複元素的Collection,而且最多包含一個null元素,Set中的元素是自動排序的,與添加順序無關。性能
具體實現類包括TreeSet,HashSet,EnumSet,均不是線程安全的。this
1.經常使用實現類HashSet和TreeSetspa
區別以下:線程
1)HashSet底層是經過哈希表實現的,而TreeSet是經過二叉樹實現的。3d
2)TreeSet類是使用元素的天然順序對元素進行排序,且同一個TreeSet內的元素類型必須一致 ; 若是TreeSet內的元素是類對象,則該類必需實現Comparable接口爲該類定製排序方式而且具備toString方法,以下面代碼所示。
HashSet根據哈希值來對元素進行排序。
3)HashSet要求放入的對象必須實現HashCode()方法,放入的對象,是以hashcode碼做爲標識的 ;具備相同內容的 String對象,hashcode是同樣,因此放入的內容不能重複,可是同一個類的對象能夠放入不一樣的實例 。
4)HashSet的性能比Treeset好,由於TreeSet須要額外的紅黑樹算法來維護集合元素的次序,只有當須要一個保持排序的Set時,纔會用TreeSet。
import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; public class Collection_try { public static void main(String[] args){ Set set=new HashSet(); set.add("2"); set.add("1"); set.add("3"); set.add("4"); Iterator i=set.iterator(); while(i.hasNext()){ System.out.println(i.next()); } System.out.println("-------------------------"); A a1=new A(11); A a2=new A(12); A a3=new A(13); A a4=new A(10); TreeSet set1=new TreeSet(); set1.add(a1); set1.add(a2); set1.add(a3); set1.add(a4); Iterator i1=set1.iterator(); while(i1.hasNext()){ System.out.println(i1.next()); } System.out.println(set1.size()); } } class A implements Comparable{ private int i; public int getI() { return i; } public void setI(int i) { this.i = i; } public A(int i){ this.i=i; } public int compareTo(Object o) //寫具體的比較方法 { A s=(A)o; if(s.getI()<this.i){ return 1; }else{ return -1; } } public String toString(){ return i+":ok"; } }
2.EnumSet
EnumSet 是一個與枚舉類型一塊兒使用的專用 Set 實現,Enumset中全部元素都必須來自單個Enum枚舉類型(即必須是同類型,且該類型是Enum的子類),EnumSet的特色是速度方面要優與HashSet和TreeSet 。
以下代碼爲一個Enum和EnumSet的例子
package mars; import java.util.EnumSet; /** * Created by zhangys on 17-7-21. */ public class Collection_EnumSet { public static void main(String [] args){ testTraversalEnum (); //枚舉類型的遍歷 testEnumSet(); //EnumSet的是一個哦你 } public static void testTraversalEnum (){ Color[] allColor = Color.values (); for (Color color : allColor) { System. out .println( " 當前顏色 name : " + color.name()); System. out .println( " 當前顏色 ordinal : " + color.ordinal()); System. out .println( " 當前顏色 value: " + color); } } private static void testEnumSet() { EnumSet<Color> currEnumSet = EnumSet.allOf(Color.class); for (Color aLightSetElement : currEnumSet) { System. out .println( " 當前 EnumSet 中數據爲: " + aLightSetElement); } System.out.println("--------------華麗麗的分割線---------------"); EnumSet<Color> arEnumSet = EnumSet.of(Color.RED,Color.BLACK,Color.BLUE); for (Color aLightSetElement : arEnumSet) { System. out .println( " 當前 EnumSet 中數據爲: " + aLightSetElement); } } public enum Color{ RED(1),BLUE(2),BLACK(3),YELLOW(4),GREEN(5); int node; private Color(int node){ //構造方法,只能爲私有 this.node = node; } public String toString() { return String.valueOf (node); } } }