1. 程式人生 > >android 常用集合HashMap的使用和詳解

android 常用集合HashMap的使用和詳解

Java的集合類由Collection介面和Map介面派生

  1. 集合類的介面定義
1) Collection
一組"對立"的元素,每個位置只能儲存一個元素(物件),通常這些元素都服從某種規則
   1.1) List必須保持元素特定的順序
   1.2) Set不能有重複元素
   1.3) Queue保持一個佇列(先進先出)的順序
2) Map
一組成對的"鍵值對"物件,就像一個小型資料庫。我們可以通過"鍵"找到該鍵對應的"值"
  1. Java集合類架構層次關係

    盜用一張圖來展示集合介面和它的實現類直接拿的關係

在這裡插入圖片描述
在這裡插入圖片描述

android常用的集合方法和實現類

  • Iterator:迭代器

    它是Java集合的頂層介面(不包括 map 系列的集合,Map介面 是 map 系列集合的頂層介面)

    檢視Collection原始碼可以看到它繼承的是類 Iterable,
    檢視co

Iterator :存在於 java.util 包中。核心的方法

  • Object next():返回迭代器剛越過的元素的引用,返回值是 Object,需要強制轉換成自己需要的型別
  • boolean hasNext():判斷容器內是否還有可供訪問的元素
  • void remove():刪除迭代器剛越過的元素

這裡我們引用一個Iterator 的實現類 ArrayList 來看一下迭代器的使用:暫時先不管 List 集合是什麼,只需要看看迭代器的用法就行了

 1         //產生一個 List 集合,典型實現為 ArrayList。
 2         List list = new ArrayList();
 3         //新增三個元素
 4         list.add("Tom");
 5         list.add("Bob");
 6         list.add("Marry");
 7         //構造 List 的迭代器
 8         Iterator it = list.iterator();
 9         //通過迭代器遍歷元素
10         while(it.hasNext()){
11             Object obj = it.next();
12             System.out.println(obj);
13         }
  • HashMap
    繼承於AbstractMap,實現了Map、Cloneable、java.io.Serializable介面
    簡單來說HashMap由陣列+連結串列組成的,陣列是HashMap的主體,連結串列則是主要為了解決雜湊衝突而存在的,如果定位到的陣列位置不含連結串列(當前entry的next指向null),那麼對於查詢,新增等操作很快,僅需一次定址即可;如果定位到的陣列包含連結串列,對於新增操作,其時間複雜度為O(n),首先遍歷連結串列,存在即覆蓋,否則新增;對於查詢操作來講,仍需遍歷連結串列,然後通過key物件的equals方法逐一比對查詢。所以,效能考慮,HashMap中的連結串列出現越少,效能才會越好。

它包括幾個重要的成員變數:table, size, threshold, loadFactor, modCount
  table是一個Entry[]陣列型別,而Entry實際上就是一個單向連結串列。雜湊表的"key-value鍵值對"都是儲存在Entry陣列中的。
  size是HashMap的大小,它是HashMap儲存的鍵值對的數量。
  threshold是HashMap的閾值,用於判斷是否需要調整HashMap的容量。threshold的值=“容量*載入因子”,當HashMap中儲存資料的數量達到threshold時,就需要將HashMap的容量加倍。
  loadFactor就是載入因子。
  modCount是用來實現fail-fast機制的。

Map:key-value 的鍵值對,key 不允許重複,value 可以

1、嚴格來說 Map 並不是一個集合,而是兩個集合之間 的對映關係。

2、這兩個集合每一條資料通過對映關係,我們可以看成是一條資料。即 Entry(key,value)。Map 可以看成是由多個 Entry 組成。

3、因為 Map 集合即沒有實現於 Collection 介面,也沒有實現 Iterable 介面,所以不能對 Map 集合進行 for-each 遍歷。

HashMap的主幹是一個Entry陣列。Entry是HashMap的基本組成單元,每一個Entry包含一個key-value鍵值對。
常用的hashMap遍歷:
遍歷Entry

for(Map.Entry<String, String> entry: map.entrySet())
        {
         System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
        }

根據collection的Iterator遍歷,keySet原始碼可讀

for(String key:map.keySet())
        {
         System.out.println("Key: "+key+" Value: "+map.get(key));
        }