Map集合中键值对遍历的三种方式-----java小知识

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 了解Map集合
  • 一、方式一:通过键访问值
  • 二、方式二:键值对
  • 二、方式三:lambda表达式


了解Map集合

Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样。

Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。其中,HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。


一、方式一:通过键访问值

基本思路:先取出集合中的键对象,再通过键对象访问它的值。
实现方法:通过集合对象.keySet();取出集合中所有的键对象放入set集合里,然后通过foreach遍历,使用集合对象.get();方法取出。
代码如下:

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class test {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
	Map<String, Integer> st=new HashMap<>();
	st.put("iphone", 10);
	st.put("redmi", 100);
	st.put("redmik50", 100);
	st.put("redmik40", 100);
	Set<String> lists=st.keySet();    //重点
	for (String str : lists) {
		System.out.println(str+"--->"+st.get(str));
	}
	}
}

结果:

redmi--->100
redmik50--->100
redmik40--->100
iphone--->10

二、方式二:键值对

实现思想:将键对象和对应的值看为一个整体,放到一个Set集合中。
实现方法:需要利用Entry接口,将Map集合键值对转为Set集合,然后通过foreach循环调用接口中getKey()和getValue()方法。

interface Entry<K, V>
K getKey();
V getValue();

范例:Set> lists=st.entrySet();

代码如下(示例):

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class test {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
	Map<String, Integer> st=new HashMap<>();
	st.put("iphone", 10);
	st.put("redmi", 100);
	st.put("redmik50", 100);
	st.put("redmik40", 100);
	Set<Map.Entry<String, Integer>> lists=st.entrySet();   //重点
	for (Map.Entry<String, Integer> entry : lists) {      //重点
		System.out.println(entry.getKey()+" -->"+entry.getValue());
	}
	}
}

结果:

key redmi---> value 100
key redmik50---> value 100
key redmik40---> value 100
key iphone---> value 10

二、方式三:lambda表达式

JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。
实现思想:在这里插入图片描述

public interface BiConsumer<T, U>  //接口无法直接实例化,可以使用匿名内部类的方法

代码如下(示例):

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;

public class test {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Map<String, Integer> st = new HashMap<>();
		st.put("iphone", 10);
		st.put("redmi", 100);
		st.put("redmik50", 100);
		st.put("redmik40", 100);
		st.forEach(new BiConsumer<String, Integer>() {  //匿名内部类
			@Override
			public void accept(String t, Integer u) {
				System.out.println("key " + t + "--->" + " value " + u);
			}
		});
	}
}

结果:

key redmi---> value 100
key redmik50---> value 100
key redmik40---> value 100
key iphone---> value 10

通过lambda化简:

import java.util.HashMap;
import java.util.Map;

public class test {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Map<String, Integer> st = new HashMap<>();
		st.put("iphone", 10);
		st.put("redmi", 100);
		st.put("redmik50", 100);
		st.put("redmik40", 100);
		st.forEach((t,u)->System.out.println("key " + t + "--->" + " value " + u));	//简化后	
	}
}

结果:

key redmi---> value 100
key redmik50---> value 100
key redmik40---> value 100
key iphone---> value 10

可以看出简化后,代码更简洁使用更方便。


你可能感兴趣的:(Java知识,eclipse,java)