java遍历map集合_Java 遍历Map集合
对于Map,我只知道它存储的数据是键值对形式,要增加一个数据的时候,就put(key,value),取一个键的值就get(key)。很少会用到遍历,或者用到遍历的时候,就去网上直接copy一段代码,然后不了了之,但是不知道为什么要这样用。今天对Map遍历进行一个总结。
简介
对于Map,我只知道它存储的数据是键值对形式,要增加一个数据的时候,就put(key,value),取一个键的值就get(key)。很少会用到遍历,或者用到遍历的时候,就去网上直接copy一段代码,然后不了了之,但是不知道为什么要这样用。今天对Map遍历进行一个总结,常用方法如下:
在for-each中遍历 map.entrySet()生成的Set>集合,可以同时得到key和value。
遍历map对象keySet()方法生成的Set集合或values()方法生成的Collection集合,这种方式只能得到key或者value。
通过集合的iterator()方法进行遍历(用iterator方法进行遍历在上篇总结中已经说明其原理)
for-each中遍历 map.entrySet()
首先我们通过源码来看看map.entrySet() 是个什么东西: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()方法返回的是一个Set> 集合(即map中所存储的数据),而Set实现了Iterator接口,而实现了Iterator方法的对象好像都可以使用for-each语法,所以这里我们可以通过使用for-each中遍历 map.entrySet(),从而达到遍历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;
}
得到一个Set集合或者Collection集合,再进行遍历,这次就很方便了吧。
通过集合的iterator()方法进行遍历
这个方法比较好理解,就是先通过map.entrySet()方法得到一个Set集合,然后利用集合的iterator方法进行遍历,也就是:
Iterator iterator = map.entrySet().iterator();
while(iterator .hasNext()){
......
}
实例分析
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()方法进行遍历
Iterator> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry entry = iterator.next();
System.out.println("key "+entry.getKey() +" value"+entry.getValue());
}
}
}
java遍历map集合_Java 遍历Map集合相关推荐
- java遍历一个map集合_Java遍历Map集合的四种方式
Map 集合的遍历与 List 和 Set 集合不同.Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历.Map 以及实现 Map 的接口类(如 HashMap.Tr ...
- java list《》_Java中List集合的遍历
一.对List的遍历有三种方式 List list = new ArrayList(); list.add("testone"); list.add(&qu ...
- java 定义map集合_java基础-Map集合
java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...
- java map 实例_java中map集合嵌套形式简单示例
定义了一个学生类,封装了id和name属性,提供一个全参构造器,并复写toSting方法 class Student{ private String id; private String name; ...
- java map 数组_java技术Spring集合属性
集合属性 在Spring中可以通过一组内置的XML标签来配置集合属性,例如:<list>,<set>或<map>. 1 数组和List 配置java.util.Li ...
- java 中的集合_JAVA中的集合
JAVA中集合,是java中的基础概念,今天接着跟讲课准备课件的机会,重新整理一下关于JAVA中的集合的概念. 集合的概念 java中的集合类是用来存放对象的 集合相当于一个容器,里面包容着一组对象- ...
- java三大集合_java中三大集合框架
一.List集合 1.List实现的超级父类接口:Collection 存储一组不唯一(允许重复),有序的对象. 2.了解ArrayList类 A):定义的格式:ArrayList 集合名 = ne ...
- java 循环list 对象_java计算list集合中重复对象的次数及for循环内外创建对象
我的需求:计算字符串集合中"数值"出现的次数,然后在for循环中计算"数值"及出现的次数 解决方案: 1.使用collections类中的frequency(集 ...
- java 数组长度 可变_java基础之集合长度可变的实现原理
首先我们要明白java中的集合Collection,List,ArrayList之间的关系: ArrayList是具体的实现类,实现了List接口 List是接口,继承了Collection接口 Li ...
- java中map类型_Java中Map类型遍历的两种方式对比
Java中Map类型是存储键值对数据的类型,在编程过程经常使用,进行遍历操作对于每个Java程序员都不会模式,下面总结两种常用的遍历方式(一种keySet,一种entrySet),通过对比让你明白使用 ...
最新文章
- MyBatis源码:原来 resultMap 解析完是这样
- android rom 评测,腾讯定制Android 4.0 ROM评测 附tati刷机教程
- UA CSC696H 强化学习理论选讲1 强化学习概览
- 状态压缩 HDU 1565
- 17.3.12---urlparse模块的URL下载
- Matplotlib 绘图秘籍
- 支付宝小程序组件库开发之自定义switch组件
- MVC3学习第六章 排山倒海第二变----使用 Entity Framework Code-First 进行数据访问
- linux运维好书《高性能Linux服务器构建实战Ⅱ》已出版发售,附封面照!
- 地理加权回归简易总结
- Jenkins--发送邮件配置
- 华为U2000网管研究实录 (4) - 运行分析(系统监控客户端)
- mui 控制旋转屏幕方向
- android手机传感器,安卓手机传感器
- 金融产业数据治理实践及方法论
- 在Excel中激活数据分析工具
- 程序员相亲被大三岁的富婆姐姐看上,让他当《杭州赘婿》
- percona xtrabackup 之一 setup
- 根据日期推算星期和历法由来
- PRML《模式识别与机器学习》的Python3代码实现
热门文章
- 任意门怎么用团发_任意门日淘app官方手机版-任意门日淘安卓版下载v1.4.6-壹六下载...
- DDPush 任意门消息推送 开源免费实时信息推送服务器
- 计算机操作系统第六章测试题及答案
- 魔兽世界服务器文件,【魔兽世界7.35】魔兽一键安装服务端[带GM管理工具]
- 360se html怎么删除,360安全浏览器服务组件能删除吗 如何删除
- 常见网络安全威胁及防范
- vue改页面顶部浏览器标题栏图标、名称和地址栏详细教程
- 网络营销练习题(黑大电商专业kaoti)
- npm 可视化html编辑器,Vue + element从零打造一个H5页面可视化编辑器——pl-drag-template...
- 工作中用到的sh脚本(持续更新)