entry、map、iterator之间的联系

entry、map、iterator之间的联系

​ 经常用到HashMap,一直不知道怎么遍历,最近终于有点头绪了。

第一种方式:使用entry

​ 我们经常说map里面存的是键值对,这句话是什么意思呢,就是map里面存了很多< key,value>这种形式的数据。那么键值对在对象里面怎么表示的呢?

​ 就是用entry表示的。一个entry表示一个< key,value>。遍历map实际上就是要获取到每个entry,java里面对map对象提供了一个方法:

map.entrySet():用于返回一个存放了很多entry的集合set。

我们知道遍历一个数组可以用增强for-each循环,比如:

for(int i:array){
  System.out.println(i);
}

同样的,集合遍历的方式也可以用增强for-each循环。问题来了,我们已经有了后面的set:通过map.entrySet()获得,怎么样取得前面的entry类型呢?

java同样提供了一个方法来获取到这个entry:

map.Entry<Object,Object>

代码示例:

Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(map.Entry<Integer,Integer> entry:map.entrySet()){
    System.out.println(entry.getKey()+":"+entry.getValue());
}

第二种方式:使用Iterator

首先介绍以下什么是Iterator(迭代器)——java.util.Iterator,它是一个标准化遍历各类容器里面的所有对象的方法类。它是一个接口,我们不能直接实例化它,但是能通过一些存储结构如list,set等中的方法获得它的实现类实例化的对象。

有以下三个主要方法:

Object next():返回迭代器刚越过的元素的引用,返回值是Object,需要强制转换
boolean hasNext():判断容器内是否还有可供访问的元素
void remove():删除迭代器刚越过的元素

Iterator是可以带泛型的,如Iterator< Object>,Object表示遍历出来的每一个对象。

那么对于map来说,遍历出来的是键值对,也就是entry,回忆第一种方式,要获得map对应的entry类,可以使用:map.Entry<Object,Object>

于是迭代器写成:Iterator<map.Entry<Object,Object>> iterator

如何实例化键值对的Iterator呢?我们知道map可以返回存放了entry的集合set,而集合可以返回iterator,于是可以这样写:map.entrySet().iterator()

代码示例:

Map<Integer,Integer> map = new HashMap<Integer,Integer>();
Iterator<map.Entry<Integer,Integer>> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
  Map.Entry<Integer,Integer> entry = iterator.next();
  System.out.println(entry.getKey()+":"+entry.getValue());java
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值