Map接口實現類HashMap、Map.Entry接口

來談談集合中的Map接口,它常用的實現類爲HashMap。
這裏寫圖片描述

Map接口


  • 除了類集,Java 2還在java.util中增加了映射。 映射(map)是一個存儲關鍵字和值的關聯 或者說是關鍵字/值對的對象。給定一個關 鍵字,可以得到它的值。關鍵字和值都是 對象。關鍵字必須是唯一的。但值是可以 重複的。有些映射可以接收null關鍵字和 null值。而有的則不行
  • Map接口映射唯一關鍵字到值。關鍵字(key)是 以後用於檢索值的對象。給定一個關鍵字和一個 值,可以存儲這個值到一個Map對象中。當這個 值被存儲以後,就可以使用它的關鍵字來檢索它。 當調用的映射中沒有項存在時,其中的幾種方法 會引發一個NoSuchElementException異常。而當對 象與映射中的元素不兼容時,引發一個 ClassCastException異常。如果試圖使用映射不允 許使用的null對象時,則引發一個 NullPointerException異常。當試圖改變一個不允 許修改的映射時,則引發一個 UnsupportedOperationException異常
  • 映射循環使用兩個基本操作:get( )和put( )。使用 put( )方法可以將一個指定了關鍵字和值的值加入 映射。爲了得到值,可以通過將關鍵字作爲參數 來調用get( )方法。調用返回該值。
  • 映射不是類集,但可以獲得映射的類集“視圖”。 爲了實現這種功能,可以使用entrySet( )方法,它 返回一個包含了映射中元素的集合(Set)。爲了 得到關鍵字的類集“視圖”,可以使用keySet( ) 方法,返回一個Set集合不可以重複。爲了得到值的類集“視圖”,可以使用 values( )方法,返回一個Collection集合,可以重複。類集“視圖”是將映射集成到類集 框架內的手段
import java.util.Iterator;
import java.util.Set;

public class MapTest3
{
    public static void main(String[] args)
    {
        HashMap map = new HashMap();

        map.put("a", "aa");
        map.put("b", "bb");
        map.put("c", "cc");
        map.put("d", "dd");
        map.put("e", "ee");
        System.out.println(map);

        Set set = map.keySet();

        for(Iterator iter = set.iterator(); iter.hasNext();)
        {
            String key = (String)iter.next();
            String value = (String)map.get(key);

            System.out.println(key + "=" + value);
        }
    }
}
a=aa
b=bb
c=cc
d=dd
e=ee

遍歷Map的兩種方式,一種是直接打印輸出,另一種是利用Set集合中的iterator();方法,首先調用Map的keySet()方法返回一個Set集合,通過Set集合中key的值可以得到value的值。

HashMap


HashMap類使用散列表實現Map接口。這允 許一些基本操作如get( )和put( )的運行時間 保持恆定,即便對大型集合,也是這樣的 下面的構造函數定義爲:
- HashMap( )
- HashMap(Map m)
- HashMap(int capacity)
- HashMap(int capacity, float fillRatio)

第一種形式構造一個默認的散列映射。
第二種形式用m的元素初始化散列映射。
第三種形式將散列映射的容量初始化爲 capacity。
第四種形式用它的參數同時初始化散列映 射的容量和填充比。容量和填充比的含義 與前面介紹的HashSet中的容量和填充比相同。
HashMap實現Map並擴展AbstractMap。它 本身並沒有增加任何新的方法
應該注意的是散列映射並不保證它的元素 的順序。因此,元素加入散列映射的順序 並不一定是它們被迭代函數讀出的順序

Map.Entry


Map.Entry接口使得可以操作映射的輸入。 回想由Map接口說明的entrySet( )方法,調 用該方法返回一個包含映射輸入的集合 (Set)。這些集合元素的每一個都是一個 Map.Entry對象

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapTest5
{
    public static void main(String[] args)
    {
        HashMap map = new HashMap();

        map.put("a", "aa");
        map.put("b", "bb");
        map.put("c", "cc");
        map.put("d", "dd");

        Set set = map.entrySet();

        for(Iterator iter = set.iterator(); iter.hasNext();)
        {
            Map.Entry entry = (Map.Entry)iter.next();

            String key = (String)entry.getKey();
            String value = (String)entry.getValue();

            System.out.println(key + " : " + value);
        }
    }
}
a : aa
b : bb
c : cc
d : dd

Entry對象裏面封裝了key和value。

Map是key和value的映射,在Map裏面key和value並不是單獨存放的,在底層會生成一個entry對象,entry對象裏面封裝了value和key,所以獲得了entry對象就可以同時獲得key和value。

發佈了27 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章