最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

Map與Set的基本概念與場景

Map和set是一種專門用來進(jìn)行搜索的容器或者數(shù)據(jù)結(jié)構(gòu),其搜索的效率與其具體的實例化子類有關(guān)。以前常見的搜索方式有:

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

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

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

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

模型概念

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

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

Map接口的性質(zhì)

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

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

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

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

  4. 實現(xiàn)類:Java提供了多種Map接口的實現(xiàn),例如:

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

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

總之,Map接口是Java中重要的數(shù)據(jù)結(jié)構(gòu)之一,方便有效地進(jìn)行數(shù)據(jù)的存儲和檢索,廣泛應(yīng)用于各種場景中。

Map接口的使用方法

put(K key, V value):將指定的值與指定的鍵關(guān)聯(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 對應(yīng)的 value,key 不存在,返回默認(rè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);
        System.out.println(map.getOrDefault("five",-1));
    }
}

Set<K> keySet() :返回所有 key 的不重復(fù)集合,用 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 的可重復(fù)集合 ,用 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 映射關(guā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);
        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是一個接口,不能直接實例化對象,如果要實例化對象只能實例化其實現(xiàn)類TreeMap或者HashMap
  2. Map中存放鍵值對的Key是唯一的,value是可以重復(fù)的
  3. 在TreeMap中插入鍵值對時,key不能為空,否則就會拋NullPointerException異常,value可以為空。但是HashMap的key和value都可以為空。
  4. Map中的Key可以全部分離出來,存儲到Set中來進(jìn)行訪問(因為Key不能重復(fù))。
  5.  Map中的value可以全部分離出來,存儲在Collection的任何一個子集合中(value可能有重復(fù))。
  6. Map中鍵值對的Key不能直接修改,value可以修改,如果要修改key,只能先將該key刪除掉,然后再來進(jìn)行重新插入。

Set接口的性質(zhì)

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

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

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

  3. 實現(xiàn)類:Java提供了多種Set接口的實現(xiàn),包括:

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

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

總之,Set接口是Java中重要的數(shù)據(jù)結(jié)構(gòu),適合用于處理唯一性要求的數(shù)據(jù)集合,具有高效的存儲和檢索特性。

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接口的使用方法的詳細(xì)內(nèi)容,更多關(guān)于Java Map和Set使用方法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java之遞歸求和的兩種簡單方法(推薦)

    Java之遞歸求和的兩種簡單方法(推薦)

    下面小編就為大家?guī)硪黄狫ava之遞歸求和的兩種簡單方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 詳解Java設(shè)計模式之橋接模式

    詳解Java設(shè)計模式之橋接模式

    橋接,顧名思義,就是用來連接兩個部分,使得兩個部分可以互相通訊。橋接模式將系統(tǒng)的抽象部分與實現(xiàn)部分分離解耦,使他們可以獨立的變化。本文通過示例詳細(xì)介紹了橋接模式的原理與使用,需要的可以參考一下
    2022-06-06
  • 基于Springboot實現(xiàn)送水公司信息管理系統(tǒng)

    基于Springboot實現(xiàn)送水公司信息管理系統(tǒng)

    這篇文章主要介紹了基于Springboot實現(xiàn)送水公司信息管理,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • Java日常練習(xí)題,每天進(jìn)步一點點(46)

    Java日常練習(xí)題,每天進(jìn)步一點點(46)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • Java8使用Function讀取文件

    Java8使用Function讀取文件

    這篇文章主要為大家詳細(xì)介紹了Java8如何使用Function讀取文件,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-12-12
  • Spring Boot加載配置文件的完整步驟

    Spring Boot加載配置文件的完整步驟

    這篇文章主要給大家介紹了關(guān)于Spring Boot加載配置文件的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Mybatis輸入輸出映射及動態(tài)SQL Review

    Mybatis輸入輸出映射及動態(tài)SQL Review

    這篇文章主要介紹了Mybatis輸入輸出映射及動態(tài)SQL Review,需要的朋友可以參考下
    2017-02-02
  • 一文講透Java面試高頻之ThreadLocal原理、內(nèi)存泄漏、使用場景

    一文講透Java面試高頻之ThreadLocal原理、內(nèi)存泄漏、使用場景

    在Java多線程開發(fā)中,ThreadLocal是高頻使用的線程安全工具,它能為每個線程創(chuàng)建獨立的變量副本,完美解決多線程資源共享的并發(fā)問題,這篇文章主要介紹了Java面試高頻之ThreadLocal原理、內(nèi)存泄漏、使用場景的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • java怎么連接并訪問activemq

    java怎么連接并訪問activemq

    這篇文章主要介紹了java怎么連接并訪問activemq,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 解決SpringBoot項目讀取yml文件中值為中文時,在視圖頁面顯示亂碼

    解決SpringBoot項目讀取yml文件中值為中文時,在視圖頁面顯示亂碼

    這篇文章主要介紹了解決SpringBoot項目讀取yml文件中值為中文時,在視圖頁面顯示亂碼的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論

西丰县| 普兰店市| 织金县| 曲麻莱县| 朝阳市| 互助| 曲麻莱县| 宁河县| 合水县| 陕西省| 陇川县| 巴彦县| 麦盖提县| 邯郸市| 澄城县| 永定县| 措勤县| 武义县| 平武县| 张家川| 莱阳市| 丘北县| 沧州市| 大宁县| 文安县| 嵊州市| 突泉县| 阳高县| 集贤县| 南投市| 张家口市| 延吉市| 封丘县| 田林县| 漠河县| 神池县| 甘谷县| 邮箱| 聂拉木县| 甘泉县| 开平市|