首頁 >Java >java教程 >Java中Map介面的使用以及面試知識點總結

Java中Map介面的使用以及面試知識點總結

WBOY
WBOY轉載
2022-07-20 14:17:461584瀏覽

本篇文章為大家帶來了關於java的相關知識,其中主要整理了Map介面的使用以及面試知識點的相關問題,包括了Map介面儲存特性、常用實作類別、創建方法、常用方法等等內容,下面一起來看一下,希望對大家有幫助。

Java中Map介面的使用以及面試知識點總結

推薦學習:《java影片教學

Map介面

儲存特點

    ##以鍵(key)值(value)對的形式儲存
    • #鍵無序、無下標、元素不可重複
  1. #值無序、無下標、元素可以重複
    • 常用實作類別
    ##HashMap
  2. ##  
  3. JDK1.2 底層雜湊表實作 執行緒不安全,效率高
    LinkedHashMap
  4. #  
  5. JDK1.2 是HashMap的子類,底層雜湊表實作 執行緒不安全,效率高
    TreeMap
  6.  
  7. JDK1.2 是SortedMap的實作類,底層紅黑樹實作 執行緒不安全,效率高
    HashTable
  8. #  

JDK1.0 底層雜湊表實作 執行緒安全,效率低

Properties

JDK1.0 是HashTable的子類,底層哈希表實作執行緒安全,效率低

建立方法

# #使用多態

  • Map<鍵的泛型,值的泛型> 集合名稱=new 實作類別名稱<鍵的泛型,值的泛型>();

    • tips:一個鍵值對才是一個元素
    ##常用方法
  • 值put(鍵,值)

    :將一個鍵值對加到集合末端
  • 如果鍵已經存在,則進行值的替換

  • #void clear():清空集合元素

  • boolean containsKey(鍵):判斷集合中是否存在某個鍵

  • boolean containsValue(值):判斷集合中是否存在某個值

  • 值get(鍵):取得鍵對應的值

  • boolean isEmpty():判斷集合內容是否為空,不能判比null值

  • void putAll(Map的集合名稱):將指定Map集合的內容新增至目前集合末端

值remove(鍵):移除鍵所對應的鍵值對

    #int size()
  • :取得集合鍵值對的個數
    • 程式碼範例:
    public class Test {
        public static void main(String[] args) {
            //数字-String   1 - 一   1 - yi
            Map<Integer, String> map = new HashMap<Integer, String>();
            map.put(1, "一");
            map.put(111, "yiyiyi");
            map.put(666, "liuliuliu");
            map.put(111, "一一一");
    
            System.out.println(map.containsKey(678));//f
            System.out.println(map.containsValue("yiyiyi"));//t
    
            System.out.println(map.get(111));
    
            map.remove(666);
            System.out.println(map.get(666));
    
            System.out.println(map.size());//2
        }}
遍歷方法
    1、
  • keySet( ) get()
      先取得所有的鍵,再遍歷鍵得到所有的值
    • Set<鍵的泛型> keySet():取得所有的鍵存於Set集合並回傳

    •         //获取所有键
              Set<键的泛型> set=集合名.keySet();
              //遍历所有键
              set.forEach(
                  o-> 
                  //o就代表当前正在被遍历的键
                  //通过集合名.get(o)可以得到对应的值
              );如:		Map<Integer, String> map = new HashMap<>();
              map.put(123, "yiersan");
              map.put(234, "ersansi");
              map.put(456, "siwuliu");
              map.put(999, "jiujiujiu");
              Set<Integer> set=map.keySet();
              set.forEach(o-> System.out.println("键:"+o+",值:"+map.get(o)));
    • 2、
    values()
  • #直接取得所有的值
    • Collection<值的泛型> values():取得所有的值存於Collection集合並傳回

    • Collection<值的泛型> coll = 集合名.values();coll.forEach(v-> v就代表当前的值);如:		Collection<String> coll = map.values();
              coll.forEach(v-> System.out.println(v));
    • 3、
    • entrySet()

    • 取得鍵值對物件進行遍歷

    • Set< Map.Entry<鍵的泛型,值的泛型> > entrySet() :取得所有的鍵值對物件存於Set集合並傳回

    Set< Map.Entry<鍵的泛型,值的泛型> > 等同於Set<鍵值對物件>
  • getKey():取得Entry物件中的鍵
    • getValue():取得Entry物件中的值

        //获取键值对对象集合
        Set<Map.Entry<键的泛型,值的泛型>> set2=集合名.entrySet();
        for (Map.Entry entry : set2) {
            //通过entry.getKey()获取键
            //通过entry.getValue()获取值
        }如:        Set<Map.Entry<键的泛型,值的泛型>> set2=集合名.entrySet();
        for (Map.Entry entry : set2) {
            System.out.println("键:"+entry.getKey()+",值:"+entry.getValue())
        }
        System.out.println("lambda自遍历:");
        set2.forEach(entry-> System.out.println("键:"+entry.getKey()+",值:"+entry.getValue()));

    4、
  • 自遍歷forEach

    JDK8.0

  •         集合名.forEach(new BiConsumer<键的泛型, 值的泛型>() {
                @Override
                public void accept(键的泛型 i, 值的泛型 s) {
                    //i代表键
                    //s代表值
                }
            });
            System.out.println("lambda简化自遍历:");
            map.forEach((k,v)-> k代表键,v代表值);如:
    		map.forEach(new BiConsumer<Integer, String>() {
                @Override
                public void accept(Integer i, String s) {
                    System.out.println("键:"+i+",值:"+s);
                }
            });
            System.out.println("lambda简化自遍历:");
            map.forEach((k,v)-> System.out.println("键:"+k+",值:"+v));
    不同實作類別的使用
  • HashMap可以存放null值,鍵可以存放0-1個null,值可以存放0-n個null

    • #LinkedHashMap
    • 可以確保存入取出順序一致
  • #TreeMap可以根據鍵進行預設的升序排序

  • #不能對null進行預設排序
  • 如果鍵為自訂類型,則必須設定排序規則,方式與TreeSet一致

    • #HashTable
    • 不能存放null值

Properties

鍵和值必須為String類型
  • 建立不建議使用多態不能宣告泛型

  • 集合面試知識點補充

  • Set
  • 是一個只有鍵,沒有值的

    Map集合#底層陣列長度為16

    #######陣列載入因子為###75%###,當陣列位元使用到達75%時,會以###平衡二元樹###的方式進行數組擴容,擴容長度為原始長度###*2###,擴容出來的###每個數組長度都為16#######
  • 為什麼Set或Map在存放數值的時候,是從小到大的?

    • 當存放數值過小時,整數值本身就是它的存放下標,下標從小到大,所以值的存放也是從小到大
  • 紅黑樹使用的是二分查找法,特點為查詢效率快

  • 紅黑樹:以雜湊碼值為判斷標準,雜湊碼值比目前元素大,往右側存儲,雜湊碼值比目前元素小,往左側儲存

  • 二分查找法:特點為一次鎖定資料的一半

  • #當雜湊表的陣列中某個鍊錶長度達到了8時,會重組鍊錶元素,開啟紅黑樹

#推薦學習:《java影片教學

以上是Java中Map介面的使用以及面試知識點總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除