集合 Collection
collection
List :元素是有序的,元素可以重復,因為該集合體系有索引。
ArrayList:底層的數據結構使用的是數組結構。特點:查詢速度快,但是增刪稍慢,線程步同步
LinkedList:底層的使用的是鏈表結構。特點:增刪速度很快,查詢稍慢,線程不同步
Vector:底層是數組數據結構。線程同步。被ArrayList替代 因為效率低
Set:元素是無序的(存入和取出的順序不一定一致),元素不可重復
Set集合的功能和Collection是一致的
常見的子類
HashSet:底層數據結構是哈希表 線程是非同步的
HashSet是如何保證元素唯一性的呢?
通過元素的兩個方法,hashCode和equals來完成
如果元素的HashCode值相同,才會判斷equals是否為True
如果元素的HashCode值不同,不會調用equals
注意:對于判斷元素是否存在,以及刪除等操作,依賴的方法是hashCode和equals
TreeSet:可以對Set集合中的元素進行排序。compare to 進行排序
記住排序時當主要條件相同時,一定要比較次要條件
底層是2叉樹 保證元素唯一性的依據:compareto? ? 刪除 增加 都要在compareto中判斷
TreeSet的第二種排序方式。
當元素自身不具備比較性,或者具備的比較性不是所需要的
這時需要讓集合自身具備比較性(在集合初始化時,就具備比較方式)借助構造函數 new TreeSet(CompareInter)
泛型
泛型格式 :通過<>來定義要操作的引用數據類型
在使用java提供的對象時,什么時候寫泛型呢?
通常在集合框架中很常見
只要見到<>就要定義泛型
當使用集合時,將集合中要存儲的數據類型作為參數傳遞到<>即可
泛型類定義的泛型在整個類中有效,如果被方法使用
那么泛型類的對象明確要操作的具體類型后,所有要操作的類型就已經固定了
為了讓不同方法可以操作不同類型,而且類型還不確定
那么可以將泛型定義在方法上