Java之HashMap迭代刪除使用方法小結
map的迭代刪除,和我們常見的list,set不太一樣,不能直接獲取Iteraotr物件,提供的刪除方法也是單個的,根據key進行刪除,如果我們有個需求,將map中滿足某些條件的元素刪除掉,要怎麼做呢?
<!-- more -->
I. Map 迭代刪除
迭代刪除,在不考慮併發安全的前提下,我們看下可以怎麼支援
1. 非常不優雅版本
我們知道map並不是繼承自Collection介面的,HashMap 也沒有提供迭代支援,既然沒法直接迭代,那我就老老實的low b版好了
Map<String, Integer> map = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); List<String> removeKey = new ArrayList<>(); for (Map.Entry<String, Integer> e: map.entrySet()) { if (e.getValue() % 2== 0) { removeKey.add(e.getKey()); } } removeKey.forEach(map::remove);
上面的實現怎麼樣?並沒有什麼毛病
(為啥不直接在遍歷中刪除?)
2. 正確姿勢版
雖然Map沒有迭代,但是它的entrySet有啊,所以我們可以通過它來實現遍歷刪除
Map<String, Integer> map = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator(); Map.Entry<String, Integer> entry; while (iterator.hasNext()) { entry = iterator.next(); if (entry.getValue() % 2 == 0) { iterator.remove(); } } System.out.println(map);
上面這個可能是我們經常使用的操作姿勢了,利用迭代器來操作元素
3. 簡潔版
到jdk8之後,針對容器提供了很多簡潔的操作方式,迭代刪除這方面可以說更加簡單了
Map<String, Integer> 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);
II. 其他
1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
一灰灰的個人部落格,記錄所有學習和工作中的博文,歡迎大家前去逛逛
2. 宣告
盡信書則不如,已上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
3. 掃描關注
一灰灰blog
知識星球
相關推薦
Java之HashMap迭代刪除使用方法小結
map的迭代刪除,和我們常見的list,set不太一樣,不能直接獲取Iteraotr物件,提供的刪除方法也是單個的,根據key進行
對List元素迭代刪除的注意事項以及三個方法
有一個List,裡面儲存1-100000的數,,寫出幾種刪除是偶數的元素的程式碼 第一印象是找到list中偶數,對其直接刪除 for(int num:list){ if(num%2==0) list.remove(num);
java 陣列實現迭代方法 iterator,模仿Arraylist
在網上搜了下,發現沒有關於陣列實現迭代的相關文章,所以自己寫了下。 主要是模仿的一個Arraylist 實現的主要的功能! 程式碼如下: 首先建個介面: package com.list; public interface List<T> extends It
【小家java】java8新特性之---外部迭代和內部迭代(對比效能差異)
相關閱讀 從一個案例開始:遍歷一個集合 外部迭代 最傳統的方法是用Iterator,當然還以用for i、增強for迴圈等等。這一類方法叫做外部迭代,意為顯式地進行迭代操作,即集合中的元素訪問是由一個處於集合外部的東西來控制的,在這裡控制著迴圈的東西就是
java 開發模式之十 : 迭代器模式
原理或定義 迭代器模式又叫做遊標(Cursor)模式。GOF給出的定義:提供一種方法訪問一個容器(container)物件中的各個元素,而又不暴露該物件的內部細節。 結構 迭代器角色(Iterator): 負責定義訪問和遍歷元素的介面。具體迭代器角色(Concrete It
Java 集合之List 集合的刪除方法順序分析以及remove和removeAll區別
在上一篇 《Java 集合之List 集合的新增方法順序分析以及add和addAll區別》中已經分析過 對於List集合順序從前到後的分析論證,這裡將不再詳細分析 remove()方法的順序 此篇將就 remove()和removeAll()的區別分析 java的 Li
java之list源代碼淺析
target lec http 失效 頭節點 就會 ide ctc linked 三大數據結構鏈表、樹和圖,順序表作為當中的一種,能夠說是平時編程中最長使用到的。List接口是順序表在java中的實現。它有非常多子接口和實現類,平時的編程中使用起來非常方便。可是更進一步
Java之線程,常用方法,線程同步,死鎖
時間 imp log 沖突 根據 oms adl 無法 誰的 1, 線程的概念 進程與線程 進程:每個進程都有獨立的代碼和數據空間(進程上下文),進程間的切換會有較大的開銷,一個進程包含1--n個線程。(進程是資源分配的最小單位) 線程:同一類線程共享代碼和數據空間,每個線
Java之HashMap用法
nsvalue 隨機 random pac ring highlight pap span true 源碼: 1 package test_demo; 2 3 import java.util.HashMap; 4 import java.util.Iterat
java 之 音樂播放代碼
讀取 inpu stat exc next ner 路徑 audio med //需求:通過代碼播放音樂 //1.讀取文件 //2.將音樂文件放到播放代碼中 //3.播放 public static void main(String[] args) throws Malf
java之靜態屬性和靜態方法
person pri 技術分享 周期 銷毀 out 方法 class 屬性的區別 前言 靜態屬性和方法必須用static修飾符 靜態屬性和非靜態屬性的區別: 1、在內存中存放位置不同 所有帶static修飾符的屬性或者方法都存放在內存中的方法區 而非靜態屬性存放在內存
java之HashMap的演進
mod 示意圖 詳解 們的 同時 系統 映射 his dfa 1. 摘要 HashMap是Java程序員使用頻率最高的用於映射(鍵值對)處理的數據類型。JDK1.8對HashMap底層的實現進行了優化,例如引入紅黑樹的數據結構和擴容的優化等(8的ConcurrentHash
java中HashMap集合的常用方法
tps one style 副本 .html map cnblogs inf clone public Object clone() 返回hashMap集合的副本 其余的方法都是實現Map集合的 https://www.cnblogs.com/xiaostudy/
Java之構造器和構造方法的使用和意義
但是 屬性 end 定義 檢查 初始化 當我 還需要 初學 java中構造方法是一個重要的概念,初學時有人會對此構造方法的使用特別是其作用不清楚,下面我就來談談我對java中構造方法的理解,有不對或不清楚的地方希望各位看官提出意見,謝謝! 一.構造方法的定義聲明 構造方法
重走Java設計模式——迭代器模式(Iterator Pattern)
迭代器模式 定義 提供一種方法順序訪問一個聚合物件中各個元素, 而又無須暴露該物件的內部表示。 模式結構 1.抽象容器:一般是一個介面,提供一個iterator()方法,例如java中的Collection介面,List介面,Set介面等。 2.具體
Java之HashMap學習
概要 這一章,我們對HashMap進行學習。我們先對HashMap有個整體認識,然後再學習它的原始碼,最後再通過例項來學會使用HashMap。內容包括:第1部分 HashMap介紹第2部分 HashMap資料結構第3部分 HashMap原始碼解析(基於JDK1.6.0_45) &
python3:深刻理解__iter__和__next__ 迭代器的原理(用自定義迭代器方法進行講解)
1.iter 的用法 咱都知道, list ,tuple,dict 都是可迭代物件,如果想讓他們轉化成迭代器. 我們可以這麼做,呼叫 inter()方法,它會返回一個迭代器. 例如: from collections import Iterable,Iterator a=[1,
Java設計模式——迭代器模式
迭代器模式的定義是: 提供一種方法順序訪問一個聚合物件中的各個元素,而又不暴露其內部表示 問題: 這裡引用《Head First》中的一個示例,如果一個聚合物件(選單)中存在兩種不同的儲存結構(ArrayList & Array),該如何操作? 如果是簡單的逐個遍歷,程式
java之 介面的簡單使用方法———停車場是否可以停下車的問題
public class Parkinglot{ public static void main(String[] args){ Parking parking = new Parking(8,4); Car bus = new Bus(); parking.park(b
Java中Iterator(迭代器)實現原理
在Java中遍歷List時會用到Java提供的Iterator,Iterator十分好用,原因是: 迭代器是一種設計模式,它是一個物件,它可以遍歷並選擇序列中的物件,而開發人員不需要了解該序列的底層結構。迭代器通常被稱為“輕量級”物件,因為建立它的代價小。 Java中的Iterator功能比