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

💬推荐一款模拟面试、刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习


了解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<Map.Entry<String, Integer>> 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

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


  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值