Java中Map集合概述及成員方法撬码、Map集合的三個子類、Collections類

Map集合

  • 概述
    - 將鍵映射到值的對象
    - 一個映射不能包含重復(fù)的鍵
    - 每個鍵最多只能映射到一個值

前面我們一直在學(xué)Collection集合缘揪,那么它和Map集合有什么區(qū)別呢?

  • Map集合存儲元素是成對出現(xiàn)的义桂,Map集合的鍵是唯一的找筝,值是可重復(fù)的】兜酰可以把這個理解為:夫妻對
  • Collection集合存儲元素是單獨出現(xiàn)的袖裕,Collection的兒子Set是唯一的,List是可重復(fù)的溉瓶〖宾可以把這個理解為:光棍
  • 注意:
    • Map集合的數(shù)據(jù)結(jié)構(gòu)值針對鍵有效谤民,跟值無關(guān)
    • Collection集合的數(shù)據(jù)結(jié)構(gòu)是針對元素有效

下面我們來了解Map集合的功能概述

  • 添加功能
    • V put(K key,V value):添加元素。
public class MapDemo { 
         public static void main(String[] args) { 
                // 創(chuàng)建集合對象
                   Map<String, String> map = new HashMap<String, String>(); System.out.println("put:" + map.put("馬蓉", "王寶強")); System.out.println("put:" + map.put("馬蓉", "宋喆")); // 輸出集合名稱 System.out.println("map:" + map);
 }
}

運行結(jié)果:

put:null
put:王寶強
map:{馬蓉=宋喆}

第一次為什么是null呢疾宏?而第二次返回的是王寶強呢张足?最后奇怪的是馬蓉和宋喆真像現(xiàn)實中一樣。我來給大家說說這是為什么坎藐?

  • 因為如果鍵是第一次存儲为牍,就直接存儲元素,返回null
  • 如果鍵不是第一次存在岩馍,就用值把以前的值替換掉碉咆,返回以前的值

現(xiàn)在明白了吧。
但是我們平時添加元素不是這樣添加的蛀恩,是下面這樣

// 創(chuàng)建集合對象 
Map<String, String> map = new HashMap<String, String>(); 
// 添加元素 
map.put("鄧超", "孫儷"); 
map.put("黃曉明", "楊穎"); 
map.put("周杰倫", "昆凌"); 
map.put("劉愷威", "楊冪"); 
// 輸出集合名稱 
System.out.println("map:" + map);

輸出結(jié)果:map:{鄧超=孫儷, 周杰倫=昆凌, 黃曉明=楊穎, 劉愷威=楊冪}我們繼續(xù)

  • 刪除功能 void clear():移除所有的鍵值對元素
    V remove(Object key):根據(jù)鍵刪除鍵值對元素疫铜,并把值返回
map.clear();//會移除所有的鍵值對元素
 System.out.println("map:" + map);//map:{} //所以不建議使用 
//V remove(Object key):根據(jù)鍵刪除鍵值對元素,并把值返回 System.out.println("remove:" + map.remove("黃曉明")); System.out.println("remove:" + map.remove("黃曉波")); 
// 輸出集合名稱 
System.out.println("map:" + map);
  • 判斷功能
    • boolean containsKey(Object key):判斷集合是否包含指定的鍵
    • boolean containsValue(Object value):判斷集合是否包含指定的值
    • boolean isEmpty():判斷集合是否為空
//boolean containsKey(Object key):判斷集合是否包含指定的鍵 System.out.println("containsKey:" + map.containsKey("黃曉明")); System.out.println("containsKey:" + map.containsKey("黃曉波")); 
// 輸出集合名稱
System.out.println("map:" + map);
 //boolean isEmpty():判斷集合是否為空 System.out.println("isEmpty:"+map.isEmpty());
  • 長度功能 int size():返回集合中的鍵值對的對數(shù)
//這個也比較簡單了 
System.out.println("size:"+map.size());//size:4
  • 獲取功能 V get(Object key):根據(jù)鍵獲取值
  • Set keySet():獲取集合中所有鍵的集合
  • Collection values():獲取集合中所有值的集合
  • Set< Map.Entry< K,V>> entrySet():返回的是鍵值對對象的集合

Map子類

  • HashMap
    • HashMap類概述鍵是哈希表結(jié)構(gòu)双谆,可以保證鍵的唯一性
  • 常用案例HashMap< String,String>
  • HashMap< Integer,String>
  • HashMap< String,Student>
  • HashMap< Student,String>
  • 上面的也不是非要是學(xué)生對象壳咕,可以是你需求的對象

LinkedHashMap

- 概述
   - Map 接口的哈希表和鏈接列表實現(xiàn),具有可預(yù)知的迭代順序佃乘。
   - 由哈希表保證鍵的唯一性囱井,不可重復(fù)
   - 由鏈表保證鍵盤的有序(存儲和取出的順序一致)

TreeMap

  • 概述
    • 鍵是紅黑樹結(jié)構(gòu),可以保證鍵的排序和唯一性

Map集合的知識點和它的子類我上面都將到了趣避,下面我們來做道練習(xí)題吧

  • HashMap和Hashtable的區(qū)別庞呕?
public class HashtableDemo { 
public static void main(String[] args) { 
HashMap<String, String> hm = new HashMap<String, String>(); hm.put("android", "hello"); 
hm.put(null, "world"); 
hm.put("java", null); 
System.out.println(hm); 
Hashtable<String, String> ht = new Hashtable<String, String>(); ht.put("android", "hello"); 
ht.put(null, "world"); //NullPointerException 
ht.put("java", null);  // NullPointerException 
System.out.println(ht); 
}
}

在輸出結(jié)果中:HashMap會打印出{null=world, java=null, Android=hello}而在Hashtable中會報錯所以我們就能得出他們的區(qū)別

  • HashMap:線程不安全,效率高程帕。允許null鍵和null值
  • Hashtable:線程安全住练,效率低。不允許null鍵和null值

Collections類

我們之前學(xué)習(xí)了Collection愁拭,那么它和Collections有什么區(qū)別呢讲逛。
我們先來了解Collections類,然后在來說他們之間的區(qū)別

  • Collections類概述
    針對集合進行操作的工具類岭埠,都是靜態(tài)方法盏混。
  • Collection和Collections的區(qū)別
    Collection:是單列集合的頂層接口,有子接口List和Set惜论。
    Collections:是針對集合操作的工具類许赃,有對集合進行排序和二分查找的方法
  • Collections成員方法
    - public static < T> void sort(List list):排序 默認(rèn)情況下是自然順序。
    - public static < T> int binarySearch(List< ?> list,T key):二分查找
    - public static < T> T max(Collection< ?> coll):最大值
    - public static void reverse(List< ?> list):反轉(zhuǎn)
    - public static void shuffle(List< ?> list):隨機置換
public class CollectionsDemo { 
     public static void main(String[] args) { 
           // 創(chuàng)建集合對象 
          List<Integer> list = new ArrayList<Integer>(); 
           // 添加元素 
          list.add(30); list.add(20); list.add(50); list.add(10); list.add(40);    
          System.out.println("list:" + list); 
          // public static <T> void sort(List<T> list):排序 默認(rèn)情況下是自然順序馆类。 
          Collections.sort(list); 
          System.out.println("自然順序list:" + list); 
          // public static <T> int binarySearch(List<?> list,T key):二分查找    
          System.out.println("二分查找:" + Collections.binarySearch(list, 30)); 
          System.out.println("二分查找:"+ Collections.binarySearch(list, 300)); 
          // public static <T> T max(Collection<?> coll):最大值    
          System.out.println("max:"+Collections.max(list));
          // public static void reverse(List<?> list):反轉(zhuǎn) 
          Collections.reverse(list);
          System.out.println("list:" + list);
          //public static void shuffle(List<?> list):隨機置換    
          Collections.shuffle(list);
          System.out.println("list:" + list); 

          // public static void reverse(List<?> list):反轉(zhuǎn)   
          Collections.reverse(list);
          System.out.println("list:" + list);
     }
}

運行結(jié)果:

  • list:[30, 20, 50, 10, 40]
  • 自然順序list:[10, 20, 30, 40, 50]
  • 二分查找:2
  • 二分查找:-6
  • max:50
  • list:[50, 40, 30, 20, 10]
  • list:[30, 20, 10, 40, 50]
  • list:[50, 40, 10, 20, 30]
    • 看到結(jié)果是不是二分查找不存在的時候返回-6為什么呢混聊。
    • 因為當(dāng)二分查找不存在的時候,它就會返回最大索引+1再+1.

上面的排序功能乾巧,它在默認(rèn)情況下是自然順序句喜,如果我們要存儲一個自定義對象预愤,那么他就不說自然排序了,就要用到我們上一篇講到的比較器Comparator排序了咳胃,大家要注意一下

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末植康,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拙绊,更是在濱河造成了極大的恐慌向图,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件标沪,死亡現(xiàn)場離奇詭異榄攀,居然都是意外死亡,警方通過查閱死者的電腦和手機金句,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門檩赢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人违寞,你說我怎么就攤上這事贞瞒。” “怎么了趁曼?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵军浆,是天一觀的道長。 經(jīng)常有香客問我挡闰,道長乒融,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任摄悯,我火速辦了婚禮赞季,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奢驯。我一直安慰自己申钩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布瘪阁。 她就那樣靜靜地躺著撒遣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪管跺。 梳的紋絲不亂的頭發(fā)上义黎,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音伙菜,去河邊找鬼轩缤。 笑死命迈,一個胖子當(dāng)著我的面吹牛贩绕,可吹牛的內(nèi)容都是我干的火的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼淑倾,長吁一口氣:“原來是場噩夢啊……” “哼馏鹤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起娇哆,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤湃累,失蹤者是張志新(化名)和其女友劉穎厨相,沒想到半個月后颜骤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捻艳,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡每辟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年羔飞,在試婚紗的時候發(fā)現(xiàn)自己被綠了懦砂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窿给。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡拳缠,死狀恐怖覆获,靈堂內(nèi)的尸體忽然破棺而出马澈,到底是詐尸還是另有隱情,我是刑警寧澤弄息,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布痊班,位于F島的核電站,受9級特大地震影響摹量,放射性物質(zhì)發(fā)生泄漏涤伐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一荆永、第九天 我趴在偏房一處隱蔽的房頂上張望废亭。 院中可真熱鬧,春花似錦具钥、人聲如沸豆村。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掌动。三九已至,卻和暖如春宁玫,著一層夾襖步出監(jiān)牢的瞬間粗恢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工欧瘪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眷射,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像妖碉,于是被迫代替她去往敵國和親涌庭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法欧宜,類相關(guān)的語法坐榆,內(nèi)部類的語法,繼承相關(guān)的語法冗茸,異常的語法席镀,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)夏漱,斷路器豪诲,智...
    卡卡羅2017閱讀 134,707評論 18 139
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,504評論 0 3
  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,268評論 0 16
  • date: 2017-02-28 18:44:10 上一篇關(guān)于Python和MySQL的簡單聯(lián)調(diào)做了學(xué)習(xí)扮授。這次主要...
    樸有天虹閱讀 402評論 0 0