<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Map用於儲存具有對映關係的資料:Key - Value
對於Set,底層其實依然是一個Map,但是Set選擇不使用Value,也就是Set的Value值始終是一個常數
Map中的Key和Value可以是任何型別的資料,會封裝到HashMap$Node物件中
Map中的Key不能重複,但是Value可以重複,當有相同的Key時,等價與替換操作
存放Map鍵值對是在HashMap$Node中
tab[i] = newNode(hash, key, value, null); -- Node<K,V> newNode(int hash, K key, V value, Node<K,V> next) { return new Node<>(hash, key, value, next); }
那麼這個Node節點的資料型別是什麼樣的呢?
我們來看一下原始碼:(其還實現了Entry介面)
static class Node<K,V> implements Map.Entry<K,V> { final int hash; // 存放hash值 final K key; // 存放key值 V value; // 存放Value值 Node<K,V> next; // 存放下一個個節點,以形成連結串列結構 }
k-v為了方便程式設計師的遍歷,還會建立一個EntrySet集合,該集合存放的元素型別是Entry,而一個Entry物件含有k,v,但是本質上這裡的k-v值還是指向一個Node節點中的資料,也就是這裡的k-v存放的依然是地址資料
// k-v存在有EntrySet的一個指向 Set set = map.entrySet(); System.out.println(set.getClass());
輸出:
class java.util.HashMap$EntrySet
那麼,這個方便程式設計師遍歷的特性是如何體現的呢?
原因是Map.Entry提供了兩個非常重要的方法:K getKey(); V getValue();。所以我們可以通過如下的方式進行遍歷Map:
Set set = map.entrySet(); System.out.println(set.getClass()); for (Object obj : set) { Map.Entry entry = (Map.Entry) obj; System.out.println(entry.getKey()); System.out.println(entry.getValue()); }
那怎麼證明Entry裡面存放的k-v只是地址的指向呢?很簡單
通過debug,我們先來看一下Map中存放的資料,其no2這個鍵的地址是@727
再來看一下set中no2鍵的地址,一模一樣:
程式碼範例:
Map map = new HashMap(); // 新增鍵值對 map.put("no1","dahe"); map.put("no2","zhangsan"); // Key重複會進行替換 map.put("no1","lisi"); System.out.println(map); // 根據鍵刪除對映關係 map.remove("no1"); System.out.println(map); // 根據key得到值 Object no2 = map.get("no2"); System.out.println(no2); // 獲取鍵值對數量 System.out.println(map.size()); // 判空 System.out.println(map.isEmpty()); // 清空 // map.clear(); // 查詢鍵是否存在 System.out.println(map.containsKey("ok"));
第一式:取出所有的key,通過key取出對應的value
// 取出所有的key,通過key取出對應的value Set keySet = map.keySet(); for (Object o : keySet) { System.out.println(o); System.out.println(map.get(o)); }
第二式:把所有的value值取出
// 把所有的value值取出 Collection values = map.values(); for (Object value : values) { System.out.println(value); }
第三式:通過EntrySet來獲取 k-v
// 通過EntrySet來獲取 k-v Set entrySet1 = map.entrySet(); for (Object o : entrySet1) { // 將entry 轉成 Map.Entry Map.Entry m = (Map.Entry) o; System.out.println(m.getKey()); System.out.println(m.getValue()); }
到此這篇關於詳解Java集合類之Map篇的文章就介紹到這了,更多相關Java集合類Map內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45