所謂集合,就是和數組相似——一組數據。java中提供了一些處理集合數據的類和接口,以供咱們使用。java
因爲數組的長度固定,處理不定數量的數據比較麻煩,因而就有了集合。數組
如下是java集合框架(短虛線表示接口,長虛線表示抽象類,實線表示類,箭頭表示實現接口或者繼承)(在網絡上找的圖,不知道原做者,侵權請聯繫我刪除)(總之,關係很複雜,因此不用記得這個圖,只是用來嚇嚇人而已的)。安全
下面貼上我的理解之精簡版之Collection(集)和Map(地圖?暫且這麼理解吧),話說思惟導圖蠻好用,如下是兩幅思惟導圖是爲了方便理解本身簡化的圖,不表明真實繼承和實現關係。網絡
1)Collection數據結構
Collection (集)多線程
1)List(列表)順序,可重複。(順序:元素按你插入的順序排序)(可重複:可存在內容相同的元素,即a.equals(b)==ture);框架
2)Set(集合)無順序,不可重複。(無順序:元素不必定按照插入順序排序,類內部有本身的排序方式)(不可重複:不可存在內容相同元素,即a.equals(b)==false);ide
1.1)List分爲ArrayList,Vector,LinkedList等等函數
ArrayList:本質爲可變長度數組(其實就是系統在你數組空間不夠的時候自動幫你換了個更大的數組),底層由數組實現,未實現線程安全。spa
Vector(向量):和ArrayList相似,也是可變長度數組,但實現了線程安全,因此速度比ArrayList慢一點。
/*線程安全:多線程訪問時,採用了加鎖機制,當一個線程訪問數據時,其餘線程不能訪問該數據。*/
LinkedList:底層爲鏈表結構。相對於數組類型的集合,插入和刪除的操做比較快。
/*鏈表結構在插入刪除數據所花時間少,數組結構在隨機訪問所花時間少*/
1 import java.util.*; 2 3 ArrayList al = new ArrayList(); //默認數組大小爲10,也能夠傳入參數 4 ArrayList<int> al = new ArrayList<int>(); //使用泛型,規定了只能傳入的數據類型 5 6 //經常使用部分方法以下 7 8 al.add( 參數); //插入元素 9 al.get(下標); //得到指定下標元素 10 al.clear(); //清空容器內全部元素 11 al.isEmpty(); //判斷是否爲空 12 al.remove(下標或者數據的值); //刪除元素 13 al.size() //得到容器(數組)元素的個數 14 al.set(下標,值) //改變某個下標的值 15 al.iterator() //很重要,Collection幾乎都有的方法,返回一個迭代器,後面會講用法 16 17 //Vector和LinkedList的方法差很少也是這樣增刪查改 18 //納悶的是Vector(向量)中有方法 capacity()能夠得到容器大小,其餘類沒有
2.2)Set分爲HashSet,TreeSet,LinkedHashSet等等
Set區別於List,它是無順序,不可重複的。使用者若不關心數據的順序,只關心是否存在於集合中,就能夠選用Set類型。
HashSet:根據數據元素的hash值排序。
TreeSet:底層爲二叉樹結構。默認最小化樹排序(由小到大)。
LinkedHashSet:鏈表結構,按插入順序排序。
Set的經常使用方法其實和List類差很少,都是增刪查改。
重要的是使用迭代器遍歷元素,使用如下方式能夠訪問Set和List中元素
//假設有SEt類型或者List類型的對象a; Iterator i= a.iterator(); while(i.hasNext()){ //若是有元素 System.out.println(i.next()); //彷佛是指針的移動 } //此方法通用於含有iterator()的集合,如Set和List等
/*元素放入集Collection中,會失去原有類型。取出使用時注意類型轉換
2)Map
Map有別於Collection集合的由純數據。Map的一個單位結構爲一個鍵值對<key,value>,至關於映射。(聯想理解:map地圖,key地址,value(值)地點)
(一個地址(key)只能指向一個地點,可是地點(value)不必定只有一個地址(key)來表示。)
map不必定是順序的,不可重複。
一個key對應一個value,一個value能夠有多個key對應。(相似於函數)
在Map中,能夠經過查找key來獲得對應的value(就像數組的下標訪問,不一樣的是key不必定要爲int類型的值,能夠爲各類類型)。
HashMap:不按照創建<key,value>的順序排序,按照元素的hash值排序(彷佛不是按照hash值的大小)。
TreeMap:底層是二叉樹,最小化樹。
LinkedHashMap:鏈表結構,按創建<key,value>的順序排序,彷佛鏈表結構和數據結構都是線性結構,因此都是按照插入順序排序。
1 import java.util.*; 2 3 Map m = new HashMap(); //或者下面這種更推薦 4 Map<Integer,String> m = new HashMap<Integer,String>(); //使用泛型,規定了鍵值對<key,value>的類型。 5 6 //假設已經使用了第二種構造方法 7 m.put(2,"二"); //不一樣於Collection類型的add,map是用put加入元素 8 m.put(1,"一"); //因爲上面規定了鍵值對爲<Integer,String>類型,只能傳規定類型的參數。 9 m.put(4,"四"); 10 m.put(2,"二"); //已經存在,不會再加入 11 12 m.size() //返回元素個數 13 m.get(key) //得到對應key值的value
Map其實也能夠理解爲集合的形式。
1)key集合。
2)values集合。
3)key-values映射集合。
1 import java.util.*; 2 3 Map<String,String> m = new HashMap<String,String>(); //<String,String>的映射 4 5 m.put("東","青龍"); 6 m.put("西","白虎"); 7 m.put("南","朱雀"); 8 m.put("北","玄武"); 9 10 System.out.println( m.keySet() ); //keySet()返回key值的集合,強調map不是順序的,因此不必定按照插入順序輸出,這裏輸出的序列是 11 //南,北,東,西 12 13 System.out.println( m.values() ); //返回value值的集合 這裏是 朱雀 ,玄武,青龍,白虎 14 15 System.out.println( m.entrySet() ); //返回鍵值對<key,value>的集合 這裏是[南=朱雀, 北=玄武, 東=青龍, 西=白虎] 16
初步的理解就是這樣粗淺,若是有什麼不對或者補充歡迎來消息。
end;
撰寫時間:2017-07-24 22:21:52
修改時間:2017-07-28 10:02:12