|--- List 元素是有序的,元素可以重複。因爲該集合體繫有索引
|--- ArrayList: 底層的數據結構使用的是數組結構 特點:數組元素查詢很快,但是增刪很慢,因爲增刪一個元素,數組後面的其他元素都需要變動,線程不同步
|--- LinkList: 底層的數據結構使用的是鏈表數據結構 特點:鏈表查詢比較慢,反正與 數據結構 相反
|--- Vector: 底層是數組數據結構 特點:其他與 ArrayList 相同,但是 線程同步,被前者替代了
|--- Set 元素是無序的(存入和取出的順序不一定一致),元素不可以重複
|--- TreeSet: 可以對 Set 集合中的元素排序,底層數據結構是二叉樹。 保證元素的唯一性的一句 compareTo 方法 return 0
TreeSet 排序的第一種方式:讓元素自身具備比較性,元素需要實現 Comparable 接口實現 compareTo 方法。這種方式也成爲元素的順序。也即是默認順
序
TreeSet 排序的第二種方式:當元素不具備比較性時,或者具備的比較性不符合要求。這就要求集合自身具備比較性
在集合初始化時,就讓其擁有比較方式
當兩種排序都存在時,以比較器爲主
|--- HashSet: 底層數據結構是哈希表,線程不同步
HashSet 是如何保證元素的唯一性:
是通過元素的兩個方法,HashCode 和 equals 來完成的
如果元素 HashCode 相同,纔會判斷 equals 是否爲 true
如果元素 HashCode 不相同,就不會調用 equals 方法
注意: 對於判斷元素是否存在,以及刪除等操作,依賴的方法是元素的 hashCsode() 和 equals() 方法
List 集合判斷元素是否相同,依據的是元素的 equals() 方法 ArrayList; 注意它們的區別
Map 集合:該集合存儲鍵值對,而且要保證鍵值的唯一性 雙列存儲集合
|--- HashMap: 底層是哈希表數據結構,允許使用 null 鍵 null 值。該集合是不同步的 JDK 1.2 效率高
|--- TreeMap: 底層是二叉樹數據結構,線程不同步。可以用於給 Map 集合中的鍵進行排序。 和 Set 很像,Set 底層就是使用 Map集合
|--- Hashtable: 底層是哈希表數據結構,不可以存入 null 鍵 null 值。該集合是線程同步的; JDK 1.0 效率低
1.添加
put( key , value)
2.刪除
clear() remove( Object key)
3.判斷
containsKey( Object Key) containsValue( Object Value) isEmpty()
4.獲取
get( Object key) size() Values()
KeySet():將 Map 中所有的鍵存入 Set 集合,在利用迭代器方法取出鍵值,最後根據 get() 方法取出每一個鍵值對應的值
entrySet():
2. 集合框架 Collection List Set ArrayList LinkList Vector TreeSet HashSet
ArrayList:
1.add()的參數類型是 Object。以便於接收任意對象 2.集合中存儲的都是對象的引用
當我們使用數組時候,長度是固定的。這樣讓我們有時候使用感覺很麻煩,所以後面就定義了集合;集合可以隨着存儲元素的增加而增加,也可以隨着元素的減少而減少。
數組和集合的區別:
數組:數組既可以存儲基本數據類型,也可以存儲引用數據類型;存儲基本數據類型的時候存儲的是值,存儲引用基本數據類型的時候存儲的地址;數組的長度是固定的,不可變的。
集合:集合只能存儲引用數據類型,不過也可以存儲基本數據類型(因爲JDK新特性,會進行自動裝箱;把存儲的基本數據類型包裝成對象)。集合的長度是可變的,可以隨着元素自
動增加。
集合遍歷:數組遍歷;迭代器遍歷
3. 迭代器接口 iterator:
Iterator it = array.iterator(); 獲取迭代器,用於取出集合元素
就把取出方式定義在集合的內部,這樣取出方式就可以直接訪問集合內部的元素。
那麼取出方式就被定義成了內部類。而每個容器的數據結構不同,所以取出的動作細節也不一樣。但是都有共性內容判斷和取出。那麼可以將共性抽取。
那麼這個內部類都符合一個規則,這個規則就是 Iterator
如何獲取集合取出對象? 通過一個對外提供的方法 iterator()
for( Iterator it = vec.iterator() ; it.hasNext() ; )
{
show( it.next());
}
迭代器是對集合進行遍歷,而每個集合內部的存儲結構都是不同的;所以每一個集合存和取都是不同的,這樣就可能會要在每一個類中都定義 hasNext() 和 next() 方法。這樣就會
讓整個集合體系變得非常的臃腫。迭代器就是將這些方法向上抽出爲接口,然後各個類實現接口的方法。
好處:規範了集合的遍歷方式,整個集合體系都是使用 hasNext() 和 next() 方法來進行遍歷;代碼實現了底層封裝實現,這樣使用者不用知道怎麼實現的,只要知道使用即可。
4. List:元素是有序的,元素可以重複。因爲該集合體繫有索引
Set:元素是無序的,元素不可以重複
List:凡是可以操作角標的方法都是該體系特有的方法
List 特有的迭代器 ListIterator: 列表迭代器(是 Iterator 的子接口)
5. List集合:
包括 ArrayList , LinkedList , Vector ;
List 集合的特有功能:
void add(int index,E element)
E remove(int index)
E get(int index)
E set(int index,E element)
Vector 特有功能:
public void addElement(E obj)
public E elementAt(int index)
public Enumeration elements()
數組和鏈表的區別:數組查找快但是增刪慢;鏈表查找慢,但是增刪快;
ArrayList:底層數據結構是數組,查找快增刪慢;線程不安全,但是效率高。
Vector: 底層數據結構是數組,查找快增刪慢;線程安全,但是效率不高;
LinkedList: 底層數據結構是鏈表,查找慢增刪快;線程不安全,效率高;
ArrayList 和 Vector 的區別:底層數據結構都是數組;但是前者線程不安全,效率高;後者線程安全的,效率低。
ArrayList 和 LinkedList 的區別:前者底層數據結構是數組,後者底層數據結構是鏈表;前者數據查找快,增刪慢;後者數據查找慢,增刪快。但是都是線程不安全。
使用規則:如果查詢數據多使用 ArrayList;如果數據修改多使用LinkedList;如果都多使用ArrayList。
6.枚舉就是 Vector 特有的取出方式。其實枚舉和迭代器很像,簡單說就是一樣的。
只是因爲枚舉的名字以及方法的名稱太長了,所以逐漸被迭代器所取代
for( Enumeration en = vec.elements(); en.hasMoreElements() ; )
{
show( en.nextElement());
}
7. List 集合判斷元素是否相同,依據的是元素的 equals() 方法 ArrayList
8. Set 集合的功能和 Collection集合功能是一致
9. 當排序的時候,主要條件相同時,一定要判斷一下次要條件
10. Collections 集合(是一個集合框架工具類):所有方法都是靜態的,對集合進行操作的工具類。
Collections.sort(); Collections.max(); Collections.binarySearch(); Collections.fill(); Collections.reverse()
Collections.reverseOrder(); Collections.reverseOrder( 也可以傳一個比較器當參數);
11.把數組轉換成集合有什麼好處: 可以使用集合的思想和方法來操作數組中的元素 注意:將數組轉換成集合,不可以使用集合的增刪方法操作。因爲數組的長度是固定的
爲什麼要把集合轉換成數組: 爲了限定對元素的操作,此時元素不需要進行增刪
12.高級 for 循環: for( String s : array)
{
System.out.println( s);
}
對集合進行遍歷的時候,只能獲取元素。但是不能對集合進行操作
迭代器除了遍歷外,還可以進行 remove() 集合中元素的操作
ListIterator 可以遍歷,還可以進行增刪集合元素的操作
13.JDK 1.5版本出現的新特性: 可變參數,其實就是傳遞數組參數的簡寫形式,不用每次都去新建一個數組,而可以直接傳遞數據元素
注意:可變參數 一定要定義在參數列表的最後面
StaticImport 靜態導入。 當類名相同時,需要指定具體的包名;
當方法名相同時,需要指定所屬的對象或者類
14.System:類中的方法和屬性都是靜態的
獲取系統屬性信息: Properties getProperties();
15.Math.ceil(); 返回大於指定數據的最小整數 Math.floor();返回小於指定數據的最大整數 Math.round();四捨五入 Math.pow( 2,3);輸出8 二的三次方
Math.random();隨機數 返回大於等於0且小於1的隨機數