Collection集合學習(一)———Set接口與具體實現

接口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);
        }
    }
}
相關文章
相關標籤/搜索