我所理解Java集合框架的部分的使用(Collection和Map)

  所謂集合,就是和數組相似——一組數據。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()能夠得到容器大小,其餘類沒有
ArrayList 示例

 

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
HashMap示例

 

 

 

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    
View Code

初步的理解就是這樣粗淺,若是有什麼不對或者補充歡迎來消息。

 

end;

撰寫時間:2017-07-24 22:21:52

修改時間:2017-07-28 10:02:12

相關文章
相關標籤/搜索