您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Java中Map集合的雙列集合怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
Map是一種依照鍵(key)存儲元素的容器,鍵(key)很像下標,在List中下標是整數。在Map中鍵(key)可以使任意類型的對象。Map中不能有重復的鍵(Key),每個鍵(key)都有一個對應的值(value)。一個鍵(key)和它對應的值構成map集合中的一個元素。
鍵值對應關系
一個鍵對應一個值
鍵不能重復,值可以重復
元素存取無序
基本功能
public class MapDemo_01 { public static void main(String[] args) { //創建集合對象 Map<String,String> map = new HashMap<>(); //V put(K key,V value):添加元素 map.put("灰太狼","紅太狼"); map.put("喜羊羊","美羊羊"); map.put("扁嘴倫","暖羊羊"); //V remove(Object key):根據鍵刪除鍵值對元素 // System.out.println(map.remove("喜羊羊")); //沒有對應的鍵,則返回null // System.out.println(map.remove("沸羊羊")); //void clear():移除所有的鍵值對元素 // map.clear(); //boolean containsKey(Object key):判斷集合是否包含指定的鍵 // System.out.println(map.containsKey("喜羊羊")); //包含返回true,反之false // System.out.println(map.containsKey("沸羊羊")); //boolean isEmpty():判斷集合是否為空 // System.out.println(map.isEmpty()); //int size():集合的長度,也就是集合中鍵值對的個數 System.out.println(map.size()); System.out.println(map); } }
獲取功能
public class MapDemo_02 { public static void main(String[] args) { //創建集合對象 Map<String, String> map = new HashMap<>(); //添加元素 map.put("灰太狼", "紅太狼"); map.put("喜羊羊", "美羊羊"); map.put("扁嘴倫", "暖羊羊"); //V get(Object key):根據鍵獲取值 // System.out.println(map.get("灰太狼")); //Set<K> keySet():獲取所有鍵的集合 // Set<String> keySet = map.keySet(); // for(String key : keySet) { // System.out.println(key); // } //Collection<V> values():獲取所有值的集合 Collection<String> values = map.values(); for(String value : values) { System.out.println(value); } } }
方式一:
1)獲取所有鍵的集合。用keySet()方法實現
2)遍歷鍵的集合,獲取到每一個鍵。用增強for實現
3)根據鍵去找值。用get(Object key)方法實現
public class MapDemo_03 { public static void main(String[] args) { //創建集合對象 Map<String, String> map = new HashMap<String, String>(); //添加元素 map.put("灰太狼", "紅太狼"); map.put("喜羊羊", "美羊羊"); map.put("扁嘴倫", "暖羊羊"); //獲取所有鍵的集合。用keySet()方法實現 Set<String> keySet = map.keySet(); //遍歷鍵的集合,獲取到每一個鍵。用增強for實現 for (String key : keySet) { //根據鍵去找值。用get(Object key)方法實現 String value = map.get(key); System.out.println(key + "," + value); } } }
方式二:
1)獲取所有鍵值對對象的集合:Set<Map.Entry<K,V>> entrySet():獲取所有鍵值對對象的集合
2)遍歷鍵值對對象的集合,得到每一個鍵值對對象:用增強for實現,得到每一個Map.Entry
3)根據鍵值對對象獲取鍵和值:用getKey()得到鍵,用getValue()得到值
public class MapDemo02 { public static void main(String[] args) { //創建集合對象 Map<String, String> map = new HashMap<String, String>(); //添加元素 map.put("灰太狼", "紅太狼"); map.put("喜羊羊", "美羊羊"); map.put("扁嘴倫", "暖羊羊"); //獲取所有鍵值對對象的集合 Set<Map.Entry<String, String>> entrySet = map.entrySet(); //遍歷鍵值對對象的集合,得到每一個鍵值對對象 for (Map.Entry<String, String> me : entrySet) { //根據鍵值對對象獲取鍵和值 String key = me.getKey(); String value = me.getValue(); System.out.println(key + "," + value); } } }
1)Hashtable:
底層是哈希表數據結構,線程是同步的,不可以存入null鍵,null值。
效率較低,被HashMap 替代。
2)HashMap:(數據無序、唯一)
底層是哈希表數據結構,線程是不同步的,可以存入null鍵,null值。
要保證鍵的唯一性,需要覆蓋hashCode方法,和equals方法。
3)LinkedHashMap:(數據有序、唯一)
該子類基于哈希表又融入了鏈表。可以Map集合進行增刪提高效率。
4)TreeMap:(數據有序、唯一)
底層是二叉樹數據結構。可以對map集合中的鍵進行排序。需要使用Comparable或者Comparator 進行比較排序。return 0,來判斷鍵的唯一性。
今天驗收關卡的時候,老師針對集合這部分內容,給出了一些補充知識與相關問題,我簡短總結了一下。
【1】ArrayList、LinkedList、Vector三者區別:
Vector:數組,線程安全
ArrayList:List子類,數據存取有序,可重復;底層是數組結構實現,有索引,查詢快、增刪慢;線程不安全
LinkedList:List子類,數據存取有序,可重復;底層是鏈表結構實現,指針,查詢慢、增刪快;線程不安全
【2】HashMap與HashTable區別:
1)底層數據結構不同:HashTable只有數組+鏈表(JDK1就提出);HashMap在JDK1.8之前 數組+鏈表,在1.8之后 數組+鏈表/紅黑樹
2)初始化容量不同:HashMap 的初始容量為:16,Hashtable 初始容量為:11,兩者的負載因子默認都是:0.75
3)擴容機制不同:當已用容量>總容量 * 負載因子時,HashMap 擴容規則為當前容量翻倍,Hashtable 擴容規則為當前容量翻倍 +1
4)Hashtable是不允許鍵或值為 null 的,HashMap 的鍵值則都可以為 null
【3】HashSet與TreeSet區別:
HashSet:
1)不能保證元素的排列順序,順序有可能發生變化
2)集合元素可以是null,但只能放入一個null
3)HashSet底層是采用HashMap實現的
4)HashSet底層是哈希表實現的
TreeSet:
1)Treeset中的數據是排好序的,不允許放入null值
2)TreeSet是通過TreeMap實現的,只不過Set用的只是Map的key
3)TreeSet的底層實現是采用二叉樹(紅-黑樹)的數據結構
【4】Collection和Collections的區別:
Collection:
一個集合接口,它提供了對集合對象進行基本操作的通用接口方法。實現接口的類主要有List和Set,該接口的設計目標是為了各種具體的集合提供最大化的統一的操作方式
Collections:
針對集合類的一個包裹類,它提供了一系列靜態方法實現對各種集合的搜索、排序以及線程安全化等操作,其中的大多數方法都是用于處理線性表。Collections類不能實例化,如同一個工具類,服務于Collection框架。如果在使用Collections類的方法時,對應的Collection對象null,則這些方法都會拋出NullPointerException
感謝各位的閱讀!關于“Java中Map集合的雙列集合怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。