日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java遍历map集合_Java 遍历Map集合

發(fā)布時(shí)間:2023/12/20 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java遍历map集合_Java 遍历Map集合 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

對于Map,我只知道它存儲的數(shù)據(jù)是鍵值對形式,要增加一個(gè)數(shù)據(jù)的時(shí)候,就put(key,value),取一個(gè)鍵的值就get(key)。很少會用到遍歷,或者用到遍歷的時(shí)候,就去網(wǎng)上直接copy一段代碼,然后不了了之,但是不知道為什么要這樣用。今天對Map遍歷進(jìn)行一個(gè)總結(jié)。

簡介

對于Map,我只知道它存儲的數(shù)據(jù)是鍵值對形式,要增加一個(gè)數(shù)據(jù)的時(shí)候,就put(key,value),取一個(gè)鍵的值就get(key)。很少會用到遍歷,或者用到遍歷的時(shí)候,就去網(wǎng)上直接copy一段代碼,然后不了了之,但是不知道為什么要這樣用。今天對Map遍歷進(jìn)行一個(gè)總結(jié),常用方法如下:

在for-each中遍歷 map.entrySet()生成的Set>集合,可以同時(shí)得到key和value。

遍歷map對象keySet()方法生成的Set集合或values()方法生成的Collection集合,這種方式只能得到key或者value。

通過集合的iterator()方法進(jìn)行遍歷(用iterator方法進(jìn)行遍歷在上篇總結(jié)中已經(jīng)說明其原理)

for-each中遍歷 map.entrySet()

首先我們通過源碼來看看map.entrySet() 是個(gè)什么東西:HsahMap 1004行 jdk1.8

public Set> entrySet() {

Set> es;

return (es = entrySet) == null ? (entrySet = new EntrySet()) : es;

}

final class EntrySet extends AbstractSet> {

public final int size() { return size; }

public final void clear() { HashMap.this.clear(); }

public final Iterator> iterator() {

return new EntryIterator();

}

public final boolean contains(Object o) {

if (!(o instanceof Map.Entry))

return false;

Map.Entry,?> e = (Map.Entry,?>) o;

Object key = e.getKey();

Node candidate = getNode(hash(key), key);

return candidate != null && candidate.equals(e);

}

public final boolean remove(Object o) {

if (o instanceof Map.Entry) {

Map.Entry,?> e = (Map.Entry,?>) o;

Object key = e.getKey();

Object value = e.getValue();

return removeNode(hash(key), key, value, true, true) != null;

}

return false;

}

public final Spliterator> spliterator() {

return new EntrySpliterator<>(HashMap.this, 0, -1, 0, 0);

}

public final void forEach(Consumer super Map.Entry> action) {

Node[] tab;

if (action == null)

throw new NullPointerException();

if (size > 0 && (tab = table) != null) {

int mc = modCount;

for (int i = 0; i < tab.length; ++i) {

for (Node e = tab[i]; e != null; e = e.next)

action.accept(e);

}

if (modCount != mc)

throw new ConcurrentModificationException();

}

}

}

Map.Entry : Map 375行

由上面的代碼我們可以看到,entrySet()方法返回的是一個(gè)Set> 集合(即map中所存儲的數(shù)據(jù)),而Set實(shí)現(xiàn)了Iterator接口,而實(shí)現(xiàn)了Iterator方法的對象好像都可以使用for-each語法,所以這里我們可以通過使用for-each中遍歷 map.entrySet(),從而達(dá)到遍歷map的效果。

遍歷map對象keySet()方法生成的Set集合或values()方法生成的Collection集合

我們先來看看keySet() 和 values() 方法:HsahMap 904行 和 950 行

//904

public Set keySet() {

Set ks = keySet;

if (ks == null) {

ks = new KeySet();

keySet = ks;

}

return ks;

}

//950

public Collection values() {

Collection vs = values;

if (vs == null) {

vs = new Values();

values = vs;

}

return vs;

}

得到一個(gè)Set集合或者Collection集合,再進(jìn)行遍歷,這次就很方便了吧。

通過集合的iterator()方法進(jìn)行遍歷

這個(gè)方法比較好理解,就是先通過map.entrySet()方法得到一個(gè)Set集合,然后利用集合的iterator方法進(jìn)行遍歷,也就是:

Iterator iterator = map.entrySet().iterator();

while(iterator .hasNext()){

......

}

實(shí)例分析

package com.hand.hsp;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

/**

* Created by Moxie on 2016/12/25.

*/

public class TraverseMap {

public static void main(String[] args){

Map map = new HashMap ();

map.put("one","Hello one");

map.put("two","Hello two");

//for-each中遍歷 map.entrySet()

for(Map.Entry entry : map.entrySet()){

System.out.println("key "+entry.getKey() +" value"+entry.getValue());

}

//遍歷map對象keySet()方法生成的Set集合或values()方法生成的Collection集合

for(String key : map.keySet()){

System.out.println("key "+key);

}

for(String value : map.values()){

System.out.println("value "+value);

}

//通過集合的iterator()方法進(jìn)行遍歷

Iterator> iterator = map.entrySet().iterator();

while(iterator.hasNext()){

Map.Entry entry = iterator.next();

System.out.println("key "+entry.getKey() +" value"+entry.getValue());

}

}

}

總結(jié)

以上是生活随笔為你收集整理的java遍历map集合_Java 遍历Map集合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。