【JAVA】Map的遍历方式,Node和Entry的关系

第一种

先取出所有的Key,通过Key取出对应的Value

Map map = new HashMap();
Set keyset = map.keySet();
//(1)增强for
for (object key:keyset) {
	System.out.println(key + "-" + map.get(key));
}
//(2)迭代器
Iterator iterator = keyst.iterator();
while (iterator.hasNext()) {
	Object key = iterator.next();
	System.out.println(key + "-" + map.get(key));
}

第二种

把所有的values取出

Map map = new HashMap();
Collection values = map.values();
//(1) 增强for
for (Object value : values) {
	System.out.println(value);
}
//(2) 迭代器
Iterator iterator2 = values.iterator();
while (iterator2.hasNext()) {
	Object value = iterator2.next();
	System.out.println(value);
}

第三种

通过EntrySet 来获取k-v。EntrySet指的是map.entrySet(),其中存放着Map.Entry。Map.Entry对象存放着一组key和value,可以通过getKey和getValue方法获取。

Map map = new HashMap();
Set entrySet = map.entrySet();//EntrySet<Map.Entry<K,V>>
//(1) 增强for
for (Object entry : entrySet) {
	//将entry 转成Map.Entry
	Map.Entry m = (Map.Entry) entry;
	System.out.println(m.getKey() + "-" + m.getValue());
}
//(2) 迭代器
Iterator iterator3 = entrySet.iterator();
while (iterator3.hasNext()) {
	Object entry = iterator3.next();
	//System.out.println(next.getClass());//HashMap$Node -实现-> Map.Entry (getKey,getValue)
	//向下转型Map.Entry
	Map.Entry m = (Map.Entry) entry;
}

注意

  • Map内部存储键值对数据的基础单元其实是Node类型,Node对象作为构建哈希桶或维护链表等数据结构的基本元素。
  • Entry类似于引用了Node的值,给外部提供了不可修改数据的查看方式。Map通常会提供键视图(keySet())、值视图(values())以及键值对视图(entrySet())等方法,这些视图中的元素都必须是不可变的,以防止外部程序对Map内部数据的直接修改。使用Entry作为视图中的元素类型,可以很好地达到这个目的。而Node作为内部可变数据存储结构,不适合直接对外暴露。
  • Entry作为一个临时映射关系数据载体使用,而Node作为内部真正存储键值对数据的基本单元使用。这两个数据结构的分离设计使得Map内部实现和外部使用得以很好地解耦。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值