java自學之路-----集合(List Set ) 泛型

List{

特點:取出的順序和存入的順序一致,元素有索引,可以重複

將List集合中的元素取出有兩種方式{

1.使用迭代器iterator();

2.遍歷集合,使用get(index)獲取,這個方法只有List有

}


迭代器{

1.迭代器進行迭代容器時,不可以修改容器內容,(即:返回迭代器對象與遍歷之間不可修改)否則會拋出:ConcurrentModificationException

2.Iterator有一個子接口ListIterator(List特有方法),使用該方法可以實現在迭代過程中完成對容器元素的操作

格式:ListIterator li = list.listIterator(); 

}


子類{

1.Vector:內部是數組數據結構,同步的,效率低

2.ArrayList:內部是數組數據結構,不同步,效率高,替代了Vector,具有數組查找操作速度快 的特點

3.LinkedList:內部是鏈表數據結構,不同步,具有鏈表增刪元素速度快的特點

}

}


Set{

特點{

1.內部元素不重複(滿足a.equals(b)時,a.b只能存在一個)

2.取出的順序與存入的順序不一致

3.容器內部只有一個null

}


子類{

HashSet{

特點:內部是哈希表的數據結構,不同步,穩定

存儲方式{

1.先判斷元素哈希值是否相同,相同時就判斷內容是否相同

2.判斷哈希值就是判斷對象的hashCode()是否相同。判斷內容用equals。如果hashCode不同則補判斷equals

}

自定義hashSet容器的元素必須覆寫hashCode和equals方法,用於定義規則,判斷是否存入容器

}


LinkedSet:內部是鏈表(保證按一定的順序存儲)和哈希表(計算元素位置)相結合的數據結構


TreeSet{

特點:內部是二叉樹結構,所以使用元素的順序進行排序

注意{

自定義容器元素類型的時候必須定義比較方法,否則會拋出ClassCastException

判斷元素唯一性的方式:在比較方法過程中,如果返回0,就表示兩元素相同

}

元素比較方法{

一:讓元素自身具備比較功能,即讓該元素類實現Comparable接口並覆蓋compareTo方法

二:讓集合自身具備比較的功能,創建一個實現Comparator接口的子類,並覆蓋compare方法(該方法傳入兩個元素類型參數,並在內部對其進行比較),將該子類對象作爲集合的構造函數傳遞進TreeSet

}

}

}

}


泛型{

定義:jdk1.5之後出現的安全機制的新特性,在編譯時期使用的技術
好處{
1.將運行時期的ClassCastException轉到編譯時期
2.省去了強制類型轉換的麻煩
}

注意{
1.當操作引用數據類型不確定的時候,使用泛型(一個用於接收具體引用數據類型的參數範圍)
2.在程序中,只要用到了帶有泛型的類或接口就必須指定傳入的具體引用數據類型
}

擦除與補償{
1.擦除:運行時,會將泛型去除,所以生成的.class文件中是不帶泛型的,(爲了兼容原來的類加載器)
2.補償:運行時通過獲取元素的類型進行自動轉換動作,就不需要使用者搶孩子轉換
}

泛型的使用{
泛型類:使用泛型來接收類中要操作的引用數據類型,當類中的操作的引用數據類型不確定是,就使用泛型表示。
格式: class Name<t>{.........} :Name<String> n = new Name<String>()這個一個只能操作String類型數據的類

泛型方法:當方法靜態時,就不能訪問類定義的泛型(靜態方法不需要對象,而類的泛型需要創建對象定義),所以就可以將泛型定義在方法內部(修飾詞後,返回類型前)

格式:public static <T> void method(T obj){............}     該方法只能接收T類型的數據,

泛型接口:定義一個泛型接口後,如果該接口的實現類還不確定泛型的具體類型就依舊用class II<Q> implements I<Q>{public void show(Q q)(......)......}  ,如果確定了泛型類型就直接使用該類型class II implements I<String>{public void show(String q)(......)......} 。即何時確定具體類型就何時使用

}

通配符{
<?>定義:包含所有類型

上限與下限{
上限:對類型進行限定, ? extends E。接收E類型或E的子類型,用於存儲元素
下限:對類型進行限定, ? super E。接收E類型或E的父類型,用於取出元素

}


注意:泛型運用的時候,等號左右兩邊必須相同

例:Collection<? extends Person(//如果該地方使用Person就報錯,因爲右邊指定存儲Student類型,而左邊指定Person類型,類型不一致)> = new ArrayList<Student>( )

}

}


Set與List的總結{

保證唯一:Set

按順序存儲:TreeSet----》二叉樹結構---》Comparable(元素使用)和Comparator(容器使用)

無序存儲:HashSet---》哈希表結構---》hashCode和equals

輸入與輸出順序一致:LinkedHashSet----》哈希表和鏈表結構

不唯一:List

改動數據頻繁:LinkedList----》鏈表結構,就有Linked特點

查詢操作:ArrayList---》數組結構,具有Array特點

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章