entry、map、iterator之间的联系

来源:互联网 发布:怎么用c语言编写软件 编辑:程序博客网 时间:2024/06/06 02:16

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}