1. 程式人生 > >Java之HashMap迭代刪除使用方法小結

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. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的個人部落格,記錄所有學習和工作中的博文,歡迎大家前去逛逛

2. 宣告

盡信書則不如,已上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

3. 掃描關注

一灰灰blog

QrCode

知識星球

相關推薦

JavaHashMap刪除使用方法小結

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

javalist源碼淺析

target lec http 失效 頭節點 就會 ide ctc linked 三大數據結構鏈表、樹和圖,順序表作為當中的一種,能夠說是平時編程中最長使用到的。List接口是順序表在java中的實現。它有非常多子接口和實現類,平時的編程中使用起來非常方便。可是更進一步

Java線程,常用方法,線程同步,死鎖

時間 imp log 沖突 根據 oms adl 無法 誰的 1, 線程的概念 進程與線程 進程:每個進程都有獨立的代碼和數據空間(進程上下文),進程間的切換會有較大的開銷,一個進程包含1--n個線程。(進程是資源分配的最小單位) 線程:同一類線程共享代碼和數據空間,每個線

JavaHashMap用法

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修飾符的屬性或者方法都存放在內存中的方法區 而非靜態屬性存放在內存

javaHashMap的演進

mod 示意圖 詳解 們的 同時 系統 映射 his dfa 1. 摘要 HashMap是Java程序員使用頻率最高的用於映射(鍵值對)處理的數據類型。JDK1.8對HashMap底層的實現進行了優化,例如引入紅黑樹的數據結構和擴容的優化等(8的ConcurrentHash

javaHashMap集合的常用方法

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.具體

JavaHashMap學習

概要 這一章,我們對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功能比