亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文詳解Java中Map和Set接口的使用方法

 更新時間:2024年08月05日 10:13:15   作者:一只淡水魚66  
Map和set是一種專門用來進行搜索的容器或者數據結構,其搜索的效率與其具體的實例化子類有關,可能在查找時進行一些插入和刪除的操作,即動態(tài)查找,那上述兩種方式就不太適合了,本節(jié)介紹的Map和Set是一種適合動態(tài)查找的集合容器,需要的朋友可以參考下

Map與Set的基本概念與場景

Map和set是一種專門用來進行搜索的容器或者數據結構,其搜索的效率與其具體的實例化子類有關。以前常見的搜索方式有:

1. 直接遍歷,時間復雜度為O(N),元素如果比較多效率會非常慢。
2. 二分查找,時間復雜度為O(log2^n),但搜索前必須要求序列是有序的。

上述排序比較適合靜態(tài)類型的查找,即一般不會對區(qū)間進行插入和刪除操作了,而現實中的查找比如:

1. 根據姓名查詢考試成績
2. 通訊錄,即根據姓名查詢聯(lián)系方式
3. 不重復集合,即需要先搜索關鍵字是否已經在集合中

可能在查找時進行一些插入和刪除的操作,即動態(tài)查找,那上述兩種方式就不太適合了,本節(jié)介紹的Map和Set是一種適合動態(tài)查找的集合容器。

模型概念

一般把搜索的數據稱為關鍵字(Key),和關鍵字對應的稱為值(Value),將其稱之為Key-value的鍵值對,所以模型會有兩種:

  1. 純 key 模型,例如:
  • 有一個英文詞典,快速查找一個單詞是否在詞典中
  • 快速查找某個名字在不在通訊錄中
  1. Key-Value 模型,例如:
  • 統(tǒng)計文件中每個單詞出現的次數,統(tǒng)計結果是每個單詞都有與其對應的次數:<單詞,單詞出現的次數

Map接口的性質

在Java中,Map接口是一個用于存儲鍵值對(key-value pairs)的對象,它屬于Java Collections Framework的一部分。Map接口的主要特點包括:

  1. 鍵值對存儲Map存儲的數據是以鍵值對的形式組織的,每個鍵(key)唯一對應一個值(value)??梢酝ㄟ^鍵來快速獲取對應的值。

  2. 無序性:大多數實現類(如HashMap)不會保證元素的順序,除非使用特定的實現(如LinkedHashMap,它可以保持插入順序,或者TreeMap,它會按照鍵的自然順序或指定的比較器進行排序)。

  3. 鍵的唯一性:在同一個Map中,不能有重復的鍵。如果試圖將一個新的值與已有的鍵關聯(lián),原有的值將被新值替換。

  4. 實現類:Java提供了多種Map接口的實現,例如:

    • HashMap:基于哈希表的實現,允許null值和null鍵,查找速度快。
    • TreeMap:基于紅黑樹的實現,支持排序的鍵,查找速度相對較慢。
    • LinkedHashMap:結合了HashMap的哈希表和鏈表特性,維護插入順序。
  5. 常用方法Map接口提供了一系列的方法,例如:

    • put(K key, V value):將指定的值與指定的鍵關聯(lián)。
    • get(Object key):返回指定鍵所映射的值。
    • remove(Object key):移除指定鍵的鍵值對。
    • containsKey(Object key):檢查是否存在指定的鍵。
    • keySet():返回Map中所有鍵的集合。
    • values():返回Map中所有值的集合。

總之,Map接口是Java中重要的數據結構之一,方便有效地進行數據的存儲和檢索,廣泛應用于各種場景中。

Map接口的使用方法

put(K key, V value):將指定的值與指定的鍵關聯(lián)。

public class Main {
    public static void main(String[] args) {
        Map<String,Integer> map = new TreeMap<>();
        map.put("one",1);
        map.put("two",2);
        map.put("three",3);
        map.put("four",4);
    }
}

get(Object key):返回指定鍵所映射的值。

public class Main {
    public static void main(String[] args) {
        Map<String,Integer> map = new TreeMap<>();
        map.put("one",1);
        map.put("two",2);
        map.put("three",3);
        map.put("four",4);
        System.out.println(map.get("two"));
    }
}

V getOrDefault(Object key, V defaultValue) :返回 key 對應的 value,key 不存在,返回默認值

public class Main {
    public static void main(String[] args) {
        Map<String,Integer> map = new TreeMap<>();
        map.put("one",1);
        map.put("two",2);
        map.put("three",3);
        map.put("four",4);
        System.out.println(map.getOrDefault("five",-1));
    }
}

Set<K> keySet() :返回所有 key 的不重復集合,用 Set 容器接收

public class Main {
    public static void main(String[] args) {
        Map<String,Integer> map = new TreeMap<>();
        map.put("one",1);
        map.put("two",2);
        map.put("three",3);
        map.put("four",4);
        Set<String> strings = map.keySet();
        
    }
}

Collection<V> values() :返回所有 value 的可重復集合 ,用 Collection 容器接

public class Main {
    public static void main(String[] args) {
        Map<String,Integer> map = new TreeMap<>();
        map.put("one",1);
        map.put("two",2);
        map.put("three",3);
        map.put("four",4);
        Collection<Integer> values = map.values();
        System.out.println("==");
    }
}

Set<Map.Entry<K, V>> entrySet() :返回所有的 key-value 映射關系

public class Main {
    public static void main(String[] args) {
        Map<String,Integer> map = new TreeMap<>();
        map.put("one",1);
        map.put("two",2);
        map.put("three",3);
        map.put("four",4);
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            System.out.println("Key = "+entry.getKey()+" Val = "+entry.getValue());
        }
    }
}

注意: 

  1. Map是一個接口,不能直接實例化對象,如果要實例化對象只能實例化其實現類TreeMap或者HashMap
  2. Map中存放鍵值對的Key是唯一的,value是可以重復的
  3. 在TreeMap中插入鍵值對時,key不能為空,否則就會拋NullPointerException異常,value可以為空。但是HashMap的key和value都可以為空。
  4. Map中的Key可以全部分離出來,存儲到Set中來進行訪問(因為Key不能重復)。
  5.  Map中的value可以全部分離出來,存儲在Collection的任何一個子集合中(value可能有重復)。
  6. Map中鍵值對的Key不能直接修改,value可以修改,如果要修改key,只能先將該key刪除掉,然后再來進行重新插入。

Set接口的性質

在Java中,Set接口是一個用于存儲唯一元素的集合,它也是Java Collections Framework的一部分。Set接口的主要特點包括:

  1. 唯一性Set中不允許重復的元素,這意味著集合中的每個元素都是唯一的。如果試圖添加重復元素,操作將被拒絕,集合的狀態(tài)不會改變。

  2. 無序性Set通常不保證元素的順序。尤其是使用HashSet時,元素的存儲順序是隨機的。而LinkedHashSet可以維護元素的插入順序,TreeSet則會按自然順序或自定義的比較器進行排序。

  3. 實現類:Java提供了多種Set接口的實現,包括:

    • HashSet:基于哈希表的實現,允許null元素,查找速度快,但不保證元素的順序。
    • LinkedHashSet:結合了哈希表和鏈表的特性,保持元素的插入順序。
    • TreeSet:基于紅黑樹的實現,按升序排序元素,不允許null值。
  4. 常用方法Set接口提供了一系列的方法,例如:

    • add(E e):向集合中添加元素,如果元素已存在,則返回false。
    • remove(Object o):移除指定元素。
    • contains(Object o):檢查集合中是否包含指定元素。
    • size():返回集合中元素的數量。
    • clear():移除集合中的所有元素。
    • iterator():返回一個迭代器,用于遍歷集合中的元素。
  5. 應用場景Set常用于需要存儲不重復元素的場景,比如去重、集合運算(如交集、并集和差集)等。

總之,Set接口是Java中重要的數據結構,適合用于處理唯一性要求的數據集合,具有高效的存儲和檢索特性。

Set接口的使用方法

set 接口中的方法和 Map 接口中的常見方法大差不差,就不一 一介紹了。

import java.util.TreeSet;
import java.util.Iterator;
import java.util.Set;
public static void TestSet(){
   Set<String> s = new TreeSet<>();
   // add(key): 如果key不存在,則插入,返回ture
   // 如果key存在,返回false
   boolean isIn = s.add("apple");
   s.add("orange");
   s.add("peach");
   s.add("banana");
   System.out.println(s.size());
   System.out.println(s);
isIn = s.add("apple");
   // add(key): key如果是空,拋出空指針異常
   //s.add(null);
   // contains(key): 如果key存在,返回true,否則返回false
   System.out.println(s.contains("apple"));
   System.out.println(s.contains("watermelen"));
   // remove(key): key存在,刪除成功返回true
   //             key不存在,刪除失敗返回false
   //             key為空,拋出空指針異常
   s.remove("apple");
   System.out.println(s);
   s.remove("watermelen");
   System.out.println(s);
   Iterator<String> it = s.iterator();
   while(it.hasNext()){
       System.out.print(it.next() + " ");
  }
   System.out.println();
}

以上就是一文詳解Java中Map和Set接口的使用方法的詳細內容,更多關于Java Map和Set使用方法的資料請關注腳本之家其它相關文章!

相關文章

  • Java如何基于反射機制獲取不同的類

    Java如何基于反射機制獲取不同的類

    這篇文章主要介紹了Java如何基于反射機制獲取不同的類,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Java 多用戶登錄限制的實現方法

    Java 多用戶登錄限制的實現方法

    最近沒有事情做,閑的發(fā)呆,于是寫個東東練練手。這篇文章主要介紹了Java 多用戶登錄限制的實現方法的相關資料,需要的朋友可以參考下
    2016-11-11
  • Java中List集合的常用方法詳解

    Java中List集合的常用方法詳解

    本篇文章給大家?guī)淼膬热菔顷P于Java中List集合的常用方法詳解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。下面我們就來學習一下吧
    2021-11-11
  • Java非遞歸實現刪除任意目錄的方法

    Java非遞歸實現刪除任意目錄的方法

    這篇文章主要為大家詳細介紹了Java非遞歸實現刪除任意目錄的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • RabbitMQ簡單隊列實例及原理解析

    RabbitMQ簡單隊列實例及原理解析

    這篇文章主要介紹了RabbitMQ簡單隊列實例及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • java static塊和構造函數的實例詳解

    java static塊和構造函數的實例詳解

    這篇文章主要介紹了java static塊和構造函數的實例詳解的相關資料,希望通過本文能幫助到大家,讓大家理解掌握Java static關鍵字的函數方法,需要的朋友可以參考下
    2017-09-09
  • springboot如何開啟緩存@EnableCaching(使用redis)

    springboot如何開啟緩存@EnableCaching(使用redis)

    在Spring Boot項目中集成Redis主要包括添加依賴到pom.xml、配置application.yml中的Redis連接參數、編寫配置類、在啟動類上添加@EnableCaching注解以及測試接口的查詢和緩存驗證等步驟,首先,需要在pom.xml中添加spring-boot-starter-data-redis依賴
    2024-11-11
  • netty服務端輔助類ServerBootstrap創(chuàng)建邏輯分析

    netty服務端輔助類ServerBootstrap創(chuàng)建邏輯分析

    這篇文章主要介紹了netty服務端輔助類ServerBootstrap創(chuàng)建邏輯分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • SpringBoot結合Tess4J實現拍圖識字的示例代碼

    SpringBoot結合Tess4J實現拍圖識字的示例代碼

    圖片中的文字提取已經越來越多地應用于數據輸入和自動化處理過程,本文主要介紹了SpringBoot結合Tess4J實現拍圖識字的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • 實現 Java 本地緩存的方法解析

    實現 Java 本地緩存的方法解析

    這篇文章主要介紹了實現 Java 本地緩存的方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10

最新評論