概述
简要介绍HashMap
相信大家学过数据结构的对哈希表(Hash table)并不陌生,即使不熟悉你也应该听过哈希冲突等词,哈希表也称散列表,是一种非常重要的数据结构,出现于各种应用场景,许多缓存技术的核心就是内存中维护一张非常大的哈希表。
HashMap基于哈希表Map接口实现,提供了所有可选的映射操作,其相对于数组、线性链表、二叉树等数据结构在进行添加、删除查找等操作的性能非常高,时间复杂度为O(1)(不考虑哈希冲突的情况)。
HashMap的主要操作是put和get,内部的Entry数组是基本组成单元,每一个Entry包含一个Key-value键值对,可以说它是由数组+链表组成的。
HashMap的几种遍历方式包括使用迭代器方式遍历、For Each方式遍历,Lambda表达式遍历以及Stream API遍历(后面两种应该是JDK 1.8+以后才有的)在这里主要介绍前面三种方式遍历。
使用迭代器和For Each遍历又可以细分为分别使用EntrySet和KeySet的方式遍历。
entrySet()
entrySet如文档描述,是返回此映射中包含的映射的Set视图。
keySet()
keySet()方法返回此映射中包含的键的Set视图。
两者区别也一目了然,一个返回键值对,而一个只会返回键。
迭代器遍历HashMap
1.迭代器EntrySet()
/*
1.使用EntrySet()方法的迭代器
*/
HashMap<Integer,String> map1=new HashMap<>();
map1.put(1,"大王");
map1.put(2,"小王");
map1.put(3,"♠2");
map1.put(4,"♠A");
map1.put(5,"♠K");
Iterator<Map.Entry<Integer,String>> it = map1.entrySet().iterator();
while(it.hasNext()) {
Map.Entry<Integer, String> entry = it.next();
System.out.println(entry.getKey() + entry.getValue());
}
//System.out.println(map1);
输出结果(最后一行为直接打印HashMap的结果)
2.迭代器KeySet()
/*
2.使用KeySet()方法的迭代器
*/
HashMap<Integer,String> map2=new HashMap<>();
map2.putAll(map1);
Iterator<Integer> it = map2.keySet().iterator();
while(it.hasNext()) {
Integer key = it.next();
System.out.println(key+ map2.get(key));
}
输出结果
ForEach遍历HashMap
1.ForEach EntrySet()
/*
3.使用EntrySet()的foreach方法
*/
HashMap<Integer,String> map3=new HashMap<>();
map3.putAll(map2);
for (Map.Entry<Integer, String> entry : map1.entrySet()) {
System.out.println(entry.getKey() + entry.getValue());
}
2.ForEach KeySet()
/*
4.使用keySet()的foreach方法
*/
HashMap<Integer,String> map4=new HashMap<>();
map4.putAll(map3);
for(Integer key: map1.keySet()){
System.out.println(key+map4.get(key));
}
Lambada遍历HashMap
/*
5.使用Lambada表达式
*/
HashMap<Integer,String> map5=new HashMap<>();
map5.putAll(map4);
map5.forEach((key,value)->{
System.out.println(key+value);
});
以上五种方法的输出结果都是一样的,但是相信大家看过代码之后会有一定的理解了,使用Lambada表达式能有效地改观代码,但其核心仍然是使用foreach的遍历,并且在使用迭代器调用entrySet()方式IDEA直接建议改成entrySet()的foreach遍历方法,仅从遍历方式来说,foreach方法似乎会更加合理,同时比较entrySet和keySet方法可以发现,二者因为存储不同而在取值方法上也有些不同,entrySet可以直接通过getKey()和getValue()获取内容,keySet因为存储的是键,需要通过对应映射关系去寻找值。
最后
以上就是激动高山为你收集整理的HashMap的几种遍历方式分析的全部内容,希望文章能够帮你解决HashMap的几种遍历方式分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复