1. 程式人生 > 實用技巧 >Java—Map介面中的常用方法

Java—Map介面中的常用方法

Map介面與Collection介面的區別

  Collection中的集合,元素是孤立存在的(理解為單身),向集合中儲存元素採用一個個元素的方式儲存。

  Map中的集合,元素是成對存在的(理解為夫妻)。每個元素由鍵與值兩部分組成,通過鍵可以找對所對應的值。

  Collection中的集合稱為單列集合,Map中的集合稱為雙列集合。

  需要注意的是,Map中的集合不能包含重複的鍵,值可以重複;每個鍵只能對應一個值。

  Map中常用的集合為HashMap集合、LinkedHashMap集合。

Map介面中常用集合方法

 HashMap<K,V>:儲存資料採用的雜湊表結構,元素的存取順序不能保證一致。由於要保證鍵的唯一、不重複,需要重寫鍵的

hashCode()方法、equals()方法。

  LinkedHashMap<K,V>HashMap下有個子類LinkedHashMap,儲存資料採用的雜湊表結構+連結串列結構。

    通過連結串列結構可以保證元素的存取順序一致;通過雜湊表結構可以保證的鍵的唯一、不重複,需要重寫鍵的hashCode()方法、equals()方法。

  注意Map介面中的集合都有兩個泛型變數<K,V>,在使用時,要為兩個泛型變數賦予資料型別。兩個泛型變數<K,V>的資料型別可以相同,也可以不同。

  方法:

  put方法:將指定的鍵與值對應起來,並新增到集合中

    n方法返回值為鍵所對應的值

    使用put方法時,若指定的鍵(key)在集合中沒有,則沒有這個鍵對應的值,返回null,並把指定的鍵值新增到集合中;

    使用put方法時,若指定的鍵(key)在集合中存在,則返回值為集合中鍵對應的值(該值為替換前的值),並把指定鍵所對應的值,替換成指定的新值。

  get方法:獲取指定鍵(key)所對應的值(value)

    remove方法:根據指定的鍵(key)刪除元素,返回被刪除元素的值(value)。

//Map介面的方法演示
public class MapDemo {
    public static void main(String[] args) {
        
//建立Map物件 Map<String, String> map = new HashMap<String,String>(); //給map中新增元素 map.put("星期一", "Monday"); map.put("星期日", "Sunday"); System.out.println(map); // {星期日=Sunday, 星期一=Monday} //當給Map中新增元素,會返回key對應的原來的value值,若key沒有對應的值,返回null System.out.println(map.put("星期一", "Mon")); // Monday System.out.println(map); // {星期日=Sunday, 星期一=Mon} //根據指定的key獲取對應的value String en = map.get("星期日"); System.out.println(en); // Sunday //根據key刪除元素,會返回key對應的value值 String value = map.remove("星期日"); System.out.println(value); // Sunday System.out.println(map); // {星期一=Mon} } }

Entry鍵值對物件

  Map類設計時,提供了一個巢狀介面:Entry。Entry將鍵值對的對應關係封裝成了物件。

  即鍵值對物件,這樣我們在遍歷Map集合時,就可以從每一個鍵值對(Entry)物件中獲取對應的鍵與對應的值。

  Entry是Map介面中提供的一個靜態內部巢狀介面。

  方法:

    getKey()方法:獲取Entry物件中的鍵

    getValue()方法:獲取Entry物件中的值

    entrySet()方法:用於返回Map集合中所有的鍵值對(Entry)物件,以Set集合形式返回。

Map集合遍歷鍵值對方式

  1.獲取Map集合中,所有的鍵值對(Entry)物件,以Set集合形式返回。

  2.遍歷包含鍵值對(Entry)物件的Set集合,得到每一個鍵值對(Entry)物件

  3.通過鍵值對(Entry)物件,獲取Entry物件中的鍵與值。

public class MapDemo {
    public static void main(String[] args) {
        //建立Map物件
        Map<String, String> map = new HashMap<String,String>();
        //給map中新增元素
        map.put("鄧超", "孫儷");
        map.put("李晨", "范冰冰");
map.put("劉德華", "柳巖");
        //獲取Map中的所有key與value的對應關係
        Set<Map.Entry<String,String>> entrySet = map.entrySet();
        //遍歷Set集合
        Iterator<Map.Entry<String,String>> it =entrySet.iterator();
        while(it.hasNext()){
            //得到每一對對應關係
            Map.Entry<String,String> entry = it.next();
            //通過每一對對應關係獲取對應的key
            String key = entry.getKey();
            //通過每一對對應關係獲取對應的value
            String value = entry.getValue();
            System.out.println(key+"="+value);
        }
    }
}

  注意:Map集合不能直接使用迭代器或者foreach進行遍歷。但是轉成Set之後就可以使用了。

靜態匯入

  在導包的過程中我們可以直接匯入靜態部分,這樣某個類的靜態成員就可以直接使用了。在原始碼中經常會出現靜態匯入。

//靜態匯入格式:
import static XXX.YYY;   匯入後YYY可直接使用。 

  例如:Map.Entry的訪問,簡化後為Entry

import static java.util.Map.Entry;
public class HashMapTest {
    public static void main(String[] args) {
        //1,建立hashmap集合物件。
        Map<Student,String> map = new HashMap<Student,String>();

        //取出元素。鍵值對方式
        //Set<Map.Entry<Student, String>> entrySet = map.entrySet();
        Set<Entry<Student, String>> entrySet = map.entrySet();

        //for (Map.Entry<Student, String> entry : entrySet) {
        for (Entry<Student, String> entry : entrySet) {
            Student key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key.toString()+"....."+value);
        }
    }
}