在《Java核心技术卷1》中看到的一个输出HashMap的感觉很高大上的方法:
public static void main(String[] args) {
// 使用了泛型创建一个HashMap
Map<String, String> map = new HashMap<String, String>();
//添加键值对
map.put("zhangsan", "15254305006");
map.put("lisi", "15254305068");
map.put("wangwu", "13405786007");
//使用keySet得到所有的键值
Set<String> ketSet = map.keySet();
Iterator<String> iterator = ketSet.iterator(); // 得到迭代器
//使用Lambda方式输出
System.out.println("lambda方式输出:");
iterator.forEachRemaining(element -> {
String value = map.get(element);
System.out.println(element + "->" + value);
});
}
因为看书看的比较草,自己水平也有限,具体实在在
书上P438页
提到
。
大致思路:调用forEachRemaining方法(Java SE 8 之及以后)并提供一个lambda表达式。对迭代器的每一个元素调用这个lambda表达式,直到再没有元素为止。
本段摘自于书上:
元素被访问的顺序取决于集合类型。如何对ArrayList进行迭代,迭代器将从索引0开始,没迭代一次,索引值加1。然而,如果访问HashSet中的元素,每个元素将会按照某种随机的次序出现。虽然可以确定在迭代过程中能够遍历到集合中的每个元素,但是却无法预知元素被访问的次序。这对于计算总和或统计符合某个条件的元素个数这类与顺序无关的操作来说,并不是问题。
另外还有几个课本上看到的遍历Map的方法:
- 使用迭代器,利用hashNext()方法遍历:
public static void main(String[] args) { // 创建对象并添加键值对 Map<String, String> map = new HashMap<String, String>(); map.put("zhangsan", "15254305006"); map.put("lisi", "15254305068"); map.put("wangsu", "13405786007"); // 方法1 使用keySet得到所有的键值 Set<String> ketSet = map.keySet(); Iterator<String> iterator = ketSet.iterator(); // 得到迭代器 System.out.println("\n方式1输出:"); iterator = ketSet.iterator(); while (iterator.hasNext()) { String key = iterator.next(); String value = map.get(key); System.out.println(key + "->" + value); } }
- 使用Collection直接获取Map的值:
public static void main(String[] args) { // 创建对象并添加键值对 Map<String, String> map = new HashMap<String, String>(); map.put("zhangsan", "15254305006"); map.put("lisi", "15254305068"); map.put("wangsu", "13405786007"); // 方式2 使用values得到所有的值 System.out.println("\n方式2输出:"); Collection<String> collection = map.values(); for (String value : collection) { System.out.println(value); } }
- 使用entrySet得到键值对集合:
public static void main(String[] args) { // 创建对象并添加键值对 Map<String, String> map = new HashMap<String, String>(); map.put("zhangsan", "15254305006"); map.put("lisi", "15254305068"); map.put("wangsu", "13405786007"); // 方式3 使用entrySet得到键值对集合 System.out.println("\n方式3输出:"); Set<Entry<String, String>> keyValues = map.entrySet(); for (Entry<String, String> entry : keyValues) { System.out.println(entry.getKey() + "->" + entry.getValue()); } }