Map类的四个子类因为都覆写了toString()方法,所以我们直接使用println进行打印是可以看到类中数据的,但是,这并不是Map的标准输出方式。
与Collection子类四种输出方式(Java 集合类 3-深入浅出了解Collection的输出方式)比起,Map的输出方式略显单薄,只有iterator一种。
由于Map类并没有继承Iterable接口,所以直接使用Map是无法进行迭代器输出的,这时就要曲线救国了。
Map接口中定义了一个很重要的方法,可以使我们间接达到这个目的。
Set<Map.Entry<K, V>> entrySet();
通过entrySet()方法我们可以得到一个Set接口的对象,由于Set是Collection的子接口,所以Set可是使用迭代输出,思路如下:
Entry是Map接口中的一个内部接口,进行数据的处理,详情可以参考:
接下来,以ConcurrentHashMap为例,进行迭代输出的使用:
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class Test {
public static void main(String[] args) {
// iterator标准输出
Map<Integer, String> map = new ConcurrentHashMap<>();
map.put(1, "xucc");
map.put(2, "licc");
map.put(3, "zhangsan");
map.put(4, "lisi");
// 1. 将Map集合转换为Set
Set<Map.Entry<Integer,String>> set = map.entrySet();
// 2. 获得 Iterator 对象
Iterator<Map.Entry<Integer, String>> iterator = set.iterator();
// 3. 遍历
while(iterator.hasNext()) {
// 4. 获取对象并打印
System.out.println(iterator.next());
}
}
}
运行结果:
希望大家以后在集合类的是输出时,不管是Collection还是Map的子类,都采用iterator迭代器进行输出。