摘要:的迭代刪除,和我們常見的,不太一樣,不能直接獲取對(duì)象,提供的刪除方法也是單個(gè)的,根據(jù)進(jìn)行刪除,如果我們有個(gè)需求,將中滿足某些條件的元素刪除掉,要怎么做呢迭代刪除迭代刪除,在不考慮并發(fā)安全的前提下,我們看下可以怎么支持非常不優(yōu)雅版本我們知道并
map的迭代刪除,和我們常見的list,set不太一樣,不能直接獲取Iteraotr對(duì)象,提供的刪除方法也是單個(gè)的,根據(jù)key進(jìn)行刪除,如果我們有個(gè)需求,將map中滿足某些條件的元素刪除掉,要怎么做呢?
I. Map 迭代刪除迭代刪除,在不考慮并發(fā)安全的前提下,我們看下可以怎么支持
1. 非常不優(yōu)雅版本我們知道m(xù)ap并不是繼承自Collection接口的,HashMap 也沒有提供迭代支持,既然沒法直接迭代,那我就老老實(shí)的low b版好了
Mapmap = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); List removeKey = new ArrayList<>(); for (Map.Entry e: map.entrySet()) { if (e.getValue() % 2== 0) { removeKey.add(e.getKey()); } } removeKey.forEach(map::remove);
上面的實(shí)現(xiàn)怎么樣?并沒有什么毛病
(為啥不直接在遍歷中刪除?)
2. 正確姿勢(shì)版雖然Map沒有迭代,但是它的entrySet有啊,所以我們可以通過它來實(shí)現(xiàn)遍歷刪除
Mapmap = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); Iterator > iterator = map.entrySet().iterator(); Map.Entry entry; while (iterator.hasNext()) { entry = iterator.next(); if (entry.getValue() % 2 == 0) { iterator.remove(); } } System.out.println(map);
上面這個(gè)可能是我們經(jīng)常使用的操作姿勢(shì)了,利用迭代器來操作元素
3. 簡(jiǎn)潔版到j(luò)dk8之后,針對(duì)容器提供了很多簡(jiǎn)潔的操作方式,迭代刪除這方面可以說更加簡(jiǎn)單了
Map4. 其他map = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); map.entrySet().removeIf(entry -> entry.getValue() % 2 == 0);
盡信書則不如,已上內(nèi)容,純屬一家之言,因個(gè)人能力有限,難免有疏漏和錯(cuò)誤之處,如發(fā)現(xiàn)bug或者有更好的建議,歡迎批評(píng)指正,不吝感激
微博地址: 小灰灰Blog
QQ: 一灰灰/3302797840
個(gè)人站點(diǎn) 一灰灰Blog: https://liuyueyi.github.io/he...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/74686.html
摘要:中的使用及在中的沖突方案引言簡(jiǎn)稱是在作為的替代選擇新引入的,是包的重要成員。為了解決在頻繁沖突時(shí)性能降低的問題,中使用平衡樹來替代鏈表存儲(chǔ)沖突的元素。目前,只有和會(huì)在頻繁沖突的情況下使用平衡樹。 java中ConcurrentHashMap的使用及在Java 8中的沖突方案 1、引言 ConcurrentHashMap(簡(jiǎn)稱CHM)是在Java 1.5作為Hashtable的替代選擇新...
摘要:繼承于,實(shí)現(xiàn)了接口。的定義的定義從中,我們可以看出和都實(shí)現(xiàn)了接口。指向的的總的大小是迭代器還是枚舉類的標(biāo)志為,表示它是迭代器否則,是枚舉類。默認(rèn)加載因子指定容量大小的構(gòu)造函數(shù)當(dāng)?shù)膶?shí)際容量閾值時(shí),閾值總的容量加載因子,就將的容量翻倍。 概要 學(xué)完了Map的全部?jī)?nèi)容,我們?cè)倩仡^開開Map的框架圖。showImg(https://segmentfault.com/img/remote/146...
摘要:底層基于拉鏈?zhǔn)降纳⒘薪Y(jié)構(gòu),并在中引入紅黑樹優(yōu)化過長鏈表的問題。在其之上,通過維護(hù)一條雙向鏈表,實(shí)現(xiàn)了散列數(shù)據(jù)結(jié)構(gòu)的有序遍歷。 原文地址 LinkedHashMap LinkedHashMap繼承自HashMap實(shí)現(xiàn)了Map接口。基本實(shí)現(xiàn)同HashMap一樣,不同之處在于LinkedHashMap保證了迭代的有序性。其內(nèi)部維護(hù)了一個(gè)雙向鏈表,解決了 HashMap不能隨時(shí)保持遍歷順序和插...
摘要:返回值存在返回對(duì)應(yīng)的值不存在返回創(chuàng)建集合對(duì)象趙麗穎楊穎林志玲楊穎迪麗熱巴把指定的鍵所對(duì)應(yīng)的鍵值對(duì)元素在集合中刪除,返回被刪除元素的值。 package com.itheima.demo01.Map; import java.util.HashMap;import java.util.Map; /* java.util.Map集合 Map集合的特點(diǎn): 1.Map集合是一個(gè)雙列集合...
閱讀 1029·2021-11-23 10:11
閱讀 3866·2021-11-16 11:50
閱讀 935·2021-10-14 09:43
閱讀 2720·2021-10-14 09:42
閱讀 2719·2021-09-22 16:02
閱讀 1064·2019-08-29 10:57
閱讀 3385·2019-08-29 10:57
閱讀 2275·2019-08-26 13:52