Java學習之路(九):Map集合

Map集合概述和特色

Map是屬於java.util的一個接口Map<k,v>

  • k:映射所維護的鍵的類型
  • v:映射值的類型

Map是將鍵映射到值的對象。一個映射不能包含重複的鍵;每一個鍵最多隻能映射到一個值。java

Map接口和Collection接口的不一樣

  • Map是雙列的,Collection是單列的
  • Map的鍵惟一,Collection的Set是惟一的
  • Map集合的數據結構只針對鍵有效,跟值無關
  • Collection集合的數據結構是針對元素有效的

Map集合的功能概述

添加功能:

  • V put(K key,V value):添加元素
  • 若是鍵是第一次存儲,直接存儲元素,返回null
  • 若是鍵不是第一次存儲,就用本次存儲的值將以前的值給替換掉,將之前的值給彈出

刪除功能:

  • void clear():移除全部的鍵值對元素
  • V remove(Object key):根據鍵刪除鍵值對元素,並把值返回

判斷功能:

  • boolean containsKey(Object key):判斷集合是否包含指定的鍵
  • boolean containsValue(Object value):判斷集合是否包含指定的值
  • boolean isEmpty():判斷集合是否爲空

獲取功能:

  • V get(Object key):根據鍵獲取值
  • Set<K> KeySet():獲取集合中全部鍵的集合
  • Collection<V> values():獲取集合中全部值的集合

長度功能:

  • int size():返回集合中的鍵值對的個數

Map是一個接口,通常咱們都是使用它的子類HashMap

HashMap使用注意事項

  1. 聲明HashMap時的鍵值能夠是任意對象
  2. 若是有重複的鍵,會把之前的替換
  3. 值能夠爲空(null)
  4. 鍵能爲空
  5. put方法的返回值
    1. 若是鍵是第一次存值,就直接儲存元素,返回null
    2. 若是鍵不是第一次存在,就用值把之前的值替換掉。返回之前的值

HashMap的一個簡單的例子(第一種遍歷方法:不推薦)

package lesson0006;

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

public class Demo01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Map<String,String> map = new HashMap<>();
        map.put("k1","v1");
        map.put("k2","v2");
        map.put("k3","v3");
        map.put("k4","v4");
        
        //獲取全部的key
        Set<String> keys = map.keySet();
        for(String k:keys){
            String value = map.get(k);
            System.out.println("Key:"+k+"-Value:"+value);
        }
        
        
    }

}

 

HashMap的另外一個簡單的例子(第二種遍歷方法:推薦)-經過鍵值對對象(Entry)找鍵和值

package lesson0006;

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

public class Demo02 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Map<String,String> map = new HashMap<>();
        map.put("k1","v1");
        map.put("k2","v2");
        map.put("k3","v3");
        map.put("k4","v4");
        
        
        //獲取全部的key
        Set<Entry<String, String>> entrySet =  map.entrySet();
        for(Entry entryObj:entrySet){
            Object k = entryObj.getKey();
            Object value = entryObj.getValue();
            System.out.println("Key:"+k+"-Value:"+value);
        }
        
        
        
    }

}

 

Entry的一些分析:安全

  • Map.Entry是一個鍵值對對象
  • Map.Entry是一個接口,它的實現類對象是HashMap$Node
  • Map.Entry是有個key和value屬性,經過get方法能夠取值
  • 咱們遍歷Entry的方法通常有迭代器和加強for循環

LinkedHashMap

特色:底層是鏈表實現的,因此能夠保證怎麼存就怎麼取數據結構

HashMap和Hashtable的區別

  • Hashtable是JDK1.0版本出現的,是線程安全的,因此也是效率低下的。
  • HashMap是JDK1.2版本出現的,是線程不安全的,效率高
  • Hashtable不能夠存儲null鍵和null值,HashMap能夠存儲null鍵和null值

這裏是補充的一點Collections工具類的概述和常見方法

Collections類的概述:是一個針對集合操做的工具類less

Collections的成員方法:工具

  • public static<T> void sort(List<T> list)
  • public static<T> int binarySearch(List<?> list,T Key)
  • public static<T> T max(Collection<?> coll)
  • public static void reverse(List<?> list)
  • public static void shuffle(List<?> list)

 

泛型補充:spa

? extends E(E的子類)   針對存的操做   ?表示子類,E表示父類線程

eg:ArrayList.addAll(Collection<? extends Father> c)code

? super E(E的父類)   針對取的操做      ?表示父類,E表示子類對象

eg:ArrayList.sort(Comparator<? super Son> c)blog

相關文章
相關標籤/搜索