一文詳解Java中Map和Set接口的使用方法
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的鍵值對,所以模型會有兩種:
- 純 key 模型,例如:
- 有一個英文詞典,快速查找一個單詞是否在詞典中
- 快速查找某個名字在不在通訊錄中
- Key-Value 模型,例如:
- 統(tǒng)計文件中每個單詞出現的次數,統(tǒng)計結果是每個單詞都有與其對應的次數:<單詞,單詞出現的次數
Map接口的性質
在Java中,Map
接口是一個用于存儲鍵值對(key-value pairs)的對象,它屬于Java Collections Framework的一部分。Map
接口的主要特點包括:
鍵值對存儲:
Map
存儲的數據是以鍵值對的形式組織的,每個鍵(key)唯一對應一個值(value)??梢酝ㄟ^鍵來快速獲取對應的值。無序性:大多數實現類(如
HashMap
)不會保證元素的順序,除非使用特定的實現(如LinkedHashMap
,它可以保持插入順序,或者TreeMap
,它會按照鍵的自然順序或指定的比較器進行排序)。鍵的唯一性:在同一個
Map
中,不能有重復的鍵。如果試圖將一個新的值與已有的鍵關聯(lián),原有的值將被新值替換。實現類:Java提供了多種
Map
接口的實現,例如:HashMap
:基于哈希表的實現,允許null值和null鍵,查找速度快。TreeMap
:基于紅黑樹的實現,支持排序的鍵,查找速度相對較慢。LinkedHashMap
:結合了HashMap
的哈希表和鏈表特性,維護插入順序。
常用方法:
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()); } } }
注意:
- Map是一個接口,不能直接實例化對象,如果要實例化對象只能實例化其實現類TreeMap或者HashMap
- Map中存放鍵值對的Key是唯一的,value是可以重復的
- 在TreeMap中插入鍵值對時,key不能為空,否則就會拋NullPointerException異常,value可以為空。但是HashMap的key和value都可以為空。
- Map中的Key可以全部分離出來,存儲到Set中來進行訪問(因為Key不能重復)。
- Map中的value可以全部分離出來,存儲在Collection的任何一個子集合中(value可能有重復)。
- Map中鍵值對的Key不能直接修改,value可以修改,如果要修改key,只能先將該key刪除掉,然后再來進行重新插入。
Set接口的性質
在Java中,Set
接口是一個用于存儲唯一元素的集合,它也是Java Collections Framework的一部分。Set
接口的主要特點包括:
唯一性:
Set
中不允許重復的元素,這意味著集合中的每個元素都是唯一的。如果試圖添加重復元素,操作將被拒絕,集合的狀態(tài)不會改變。無序性:
Set
通常不保證元素的順序。尤其是使用HashSet
時,元素的存儲順序是隨機的。而LinkedHashSet
可以維護元素的插入順序,TreeSet
則會按自然順序或自定義的比較器進行排序。實現類:Java提供了多種
Set
接口的實現,包括:HashSet
:基于哈希表的實現,允許null元素,查找速度快,但不保證元素的順序。LinkedHashSet
:結合了哈希表和鏈表的特性,保持元素的插入順序。TreeSet
:基于紅黑樹的實現,按升序排序元素,不允許null值。
常用方法:
Set
接口提供了一系列的方法,例如:add(E e)
:向集合中添加元素,如果元素已存在,則返回false。remove(Object o)
:移除指定元素。contains(Object o)
:檢查集合中是否包含指定元素。size()
:返回集合中元素的數量。clear()
:移除集合中的所有元素。iterator()
:返回一個迭代器,用于遍歷集合中的元素。
應用場景:
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使用方法的資料請關注腳本之家其它相關文章!
相關文章
springboot如何開啟緩存@EnableCaching(使用redis)
在Spring Boot項目中集成Redis主要包括添加依賴到pom.xml、配置application.yml中的Redis連接參數、編寫配置類、在啟動類上添加@EnableCaching注解以及測試接口的查詢和緩存驗證等步驟,首先,需要在pom.xml中添加spring-boot-starter-data-redis依賴2024-11-11netty服務端輔助類ServerBootstrap創(chuàng)建邏輯分析
這篇文章主要介紹了netty服務端輔助類ServerBootstrap創(chuàng)建邏輯分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03