一、基本介绍
HashMap是Java中十分常用的一种数据结构,在开发和实际应用中也频繁使用。HashMap是一种基于哈希表的Map接口实现,它允许null值和null键,同时它也不保证顺序。
HashMap可以进行快速查找和快速插入,它的速度比HashTable要快,但是HashMap是非线程安全的。
HashMap的实现方式是通过Entry数组+单链表的方式实现,即当两个不同的key被计算出的hashCode相同时,它们会被放在同一个桶(bucket)中,通过链表方式将它们串联起来。
二、HashMap的基本遍历方式
HashMap的遍历方式常见的有三种,分别是:
1. 使用迭代器Iterator进行遍历。
2. 使用增强for循环进行遍历。
3. 使用Lambda表达式进行遍历。
1. 迭代器Iterator方式
使用Iterator方式进行遍历,需要通过调用HashMap的entrySet()方法,将Map转换成Set集合,再通过Set集合获取Iterator实例进行遍历。
Map
map = new HashMap
();
//添加数据
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
Iterator
> iterator = map.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry
entry = iterator.next(); System.out.println("key=" + entry.getKey() + ", value=" + entry.getValue()); }
2. 增强for循环方式
使用增强for循环方式进行遍历,同样需要通过调用HashMap的entrySet()方法,将Map转换成Set集合,然后直接使用增强for循环遍历。
Map
map = new HashMap
();
//添加数据
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
for(Map.Entry
entry : map.entrySet()) {
System.out.println("key=" + entry.getKey() + ", value=" + entry.getValue());
}
3. Lambda表达式方式
使用Lambda表达式方式进行遍历,需要在Java 8及以上版本中使用。
Map
map = new HashMap
();
//添加数据
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
map.forEach((key, value) -> System.out.println("key=" + key + ", value=" + value));
三、HashMap的多种遍历方式详解
除了基本的遍历方式外,HashMap还有一些其他的遍历方式,在某些特定场景下使用更加高效。
1. 遍历Key值
我们可以使用HashMap的keySet()方法返回所有key的Set集合,然后通过增强for循环或Iterator进行遍历所有的key。
Map
map = new HashMap
();
//添加数据
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
Set
keySet = map.keySet();
//增强for循环遍历
for(String key : keySet) {
System.out.println("key=" + key);
}
//Iterator遍历
Iterator
iterator = keySet.iterator();
while(iterator.hasNext()) {
String key = iterator.next();
System.out.println("key=" + key);
}
2. 遍历Value值
通过HashMap的values()方法可以返回所有value的Collection集合,然后通过增强for循环或Iterator进行遍历所有的value。
Map
map = new HashMap
();
//添加数据
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
Collection
values = map.values();
//增强for循环遍历
for(String value : values) {
System.out.println("value=" + value);
}
//Iterator遍历
Iterator
iterator = values.iterator();
while(iterator.hasNext()) {
String value = iterator.next();
System.out.println("value=" + value);
}
3. 使用Lambda表达式遍历
通过Lambda表达式方式遍历HashMap的key和value是最简单的方式,因为它不需要转换集合类型。
Map
map = new HashMap
();
//添加数据
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
//使用Lambda表达式遍历key和value
map.forEach((key, value) -> System.out.println("key=" + key + ", value=" + value));
4. 遍历Entry值
Entry是HashMap中的内部类,它包含key和value两个属性,使用HashMap中的entrySet()方法可以返回所有的Entry集合,然后通过增强for循环或Iterator进行遍历所有的Entry。
Map
map = new HashMap
();
//添加数据
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
Set
> entrySet = map.entrySet();
//增强for循环遍历
for(Map.Entry
entry : entrySet) { System.out.println("key=" + entry.getKey() + ", value=" + entry.getValue()); } //Iterator遍历 Iterator
> iterator = entrySet.iterator(); while(iterator.hasNext()) { Map.Entry
entry = iterator.next(); System.out.println("key=" + entry.getKey() + ", value=" + entry.getValue()); }
四、小结
以上是Java中HashMap的遍历方法的详细介绍,通过多种遍历方式我们可以灵活的使用HashMap,并能够快速处理HashMap中的数据。