多种方式Map集合遍历

article/2025/10/2 9:24:07

1.如何遍历Map中的key-value对,代码实现(至少2种)

Map集合的遍历(方式1)键找值:

package com.B.Container_13.Map;import java.util.HashMap;
import java.util.Map;
import java.util.Set;//Map集合的遍历(方式1)键找值
public class Map04_01 {public static void main(String[] args) {//创建集合对象Map<String, String> map = new HashMap<String, String>();//添加元素map.put("霍琊","游浩贤");map.put("青凌","亘瑶");map.put("羽灰","赤鸣");//获取所有键的集合。用keySet()方法实现Set<String> keySet = map.keySet();//遍历键的集合,获取到每一个键。用增强for实现for (String key : keySet) {//根据键去找值。用get(Object key)方法实现String value = map.get(key);System.out.println(key + "," + value);}}
}

Map集合的遍历(方式2)键值对对象找键找值:

package com.B.Container_13.Map;import java.util.HashMap;
import java.util.Map;
import java.util.Set;//Map集合的遍历(方式2)键值对对象找键找值
//Set<Map.Entry<K,V>> entrySet()   获取所有键值对对象的集合
public class Map04_02 {public static void main(String[] args) {//创建集合对象Map<String, String> map = new HashMap<String, String>();//添加元素map.put("霍琊","游浩贤");map.put("青凌","亘瑶");map.put("羽灰","赤鸣");//获取所有键值对对象的集合Set<Map.Entry<String, String>> entrySet = map.entrySet();//遍历键值对对象的集合,得到每一个键值对对象for (Map.Entry<String, String> me : entrySet) {//根据键值对对象获取键和值String key = me.getKey();String value = me.getValue();System.out.println(key + "," + value);}}
}
青凌,亘瑶
羽灰,赤鸣
霍琊,游浩贤进程已结束,退出代码 0

2.(Map)已知某学校的教学课程内容安排如下:
前者是老师,后者是老师所教的课程:
        ("Tom", "CoreJava");
        ("John", "Oracle");
        ("Susan", "Oracle");
        ("Jerry", "JDBC");
        ("Jim", "Unix");
        ("Kevin", "JSP");
        ("Lucy", "JSP");
        
完成下列要求:
1) 使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述课程安排。
2) 增加了一位新老师Allen 教JDBC
3) Lucy 改为教CoreJava
4) 遍历Map,输出所有的老师及老师教授的课程(用Set<Map.Entry<String,String>>、Set<String> get(key)都可)
5) 利用Map,输出所有教JSP的老师。

代码:

package com.B.Container_13.Map.Practice;import java.util.HashMap;
import java.util.Map
import java.util.Set;//(Map)已知某学校的教学课程内容安排如下:
public class A7 {public static void main(String[] args) {
//1.使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述课程安排。
//  创建对象HashMap<String, String> map = new HashMap<>();
//        添加元素map.put("Tom", "CoreJava");map.put("John", "Oracle");map.put("Susan", "Oracle");map.put("Jerry", "JDBC");map.put("Jim", "Unix");map.put("Kevin", "JSP");map.put("Lucy", "JSP");//2.增加了一位新老师Allen 教JDBCmap.put("Allen","JDBC");//3. Lucy 改为教CoreJavamap.put("Lucy", "CoreJava");//同键第二次出现是替换//4. 遍历Map,输出所有的老师及老师教授的课程
//4.(用Set<Map.Entry<String,String>>、Set<String> get(key)都可)
//方法一 键找值//获取所有键的集合。用keySet()方法实现Set<String> keySet = map.keySet();//遍历键的集合,获取到每一个键。用增强for实现for (String key : keySet) {//根据键去找值。用get(Object key)方法实现String value = map.get(key);System.out.println(key+"老师教授的课程为:"+value);}System.out.println("(方法一 键找值)");System.out.println("-----------");//方式二 键值对对象找键找值
Set<Map.Entry<String,String>> entrySet = map.entrySet();
//遍历键值对对象的集合,得到每一个键值对对象for (Map.Entry<String, String> ss : entrySet) {//根据键值对对象获取键和值
String key = ss.getKey();
String value = ss.getValue();System.out.println(key+"老师教授的课程为:"+value);}System.out.println("(方式二 键值对对象找键找值)");System.out.println("-----------");//5.利用Map,输出所有教JSP的老师
//        通过遍历值找到对应键Set<Map.Entry<String,String>> es = map.entrySet();for (Map.Entry<String, String> sss: es) {//根据键值对对象获取键和值String key = sss.getKey();String value = sss.getValue();if (value == "JSP"){System.out.println(key);
}}}
}
Kevin老师教授的课程为:JSP
Tom老师教授的课程为:CoreJava
Susan老师教授的课程为:Oracle
John老师教授的课程为:Oracle
Lucy老师教授的课程为:CoreJava
Jerry老师教授的课程为:JDBC
Allen老师教授的课程为:JDBC
Jim老师教授的课程为:Unix
(方法一 键找值)
-----------
Kevin老师教授的课程为:JSP
Tom老师教授的课程为:CoreJava
Susan老师教授的课程为:Oracle
John老师教授的课程为:Oracle
Lucy老师教授的课程为:CoreJava
Jerry老师教授的课程为:JDBC
Allen老师教授的课程为:JDBC
Jim老师教授的课程为:Unix
(方式二 键值对对象找键找值)
-----------
Kevin进程已结束,退出代码 0

3.模拟斗地主洗牌发牌(争取根据自己的思路在写一遍)
/*
1、分析:首先应准备牌:完成数字与纸牌的映射关系:使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系。

     洗牌:通过数字完成洗牌发牌(借助工具类)

     发牌:将每个人以及底牌设计,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌给3个玩家。存放的过程中要求数字大小与斗地主规则的大小对应排序。将代表不同纸牌的数字分配给不同的玩家与底牌。

     看牌:通过Map集合找到对应字符展示。通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。*/

斗地主出现的问题:

查看牌时报错,检查后发现打出Hash自动生成时生成了单列表HashSet而不是HashMap

改为HashMap后正常编译运行

排版上的小问题,牌与牌之间可以用空格隔开

 改进后更好看牌了

完整的代码:

 package com.B.Container_13.Map.Practice;import java.util.*;public class A8 {public static void main(String[] args) {
//首先应准备牌:完成数字与纸牌的映射关系:使用双列Map(HashMap)集合,
// 完成一个数字与字符串纸牌的对应关系。
//        创建对象,HashMap键是编号,值是牌HashMap<Integer, String> poker = new HashMap<Integer, String>();
//储存编号ArrayList<Integer> list = new ArrayList<>();//添加花色和数字数组String[] colors = {"♥", "♠", "♦", "♣"};//花色,红桃、黑桃、方片、梅花String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "K", "Q", "J", "A"};//数字// 从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号int index = 0;
//        双循环,外循环是花色,内循环是数字for (String color : colors) {for (String number : numbers) {poker.put(index, color + number);//往HashMap里面存储编号,并存储对应的牌list.add(index);//往ArrayList里面存储编号index++;//编号自增}}
//导入大小王,存入编号poker.put(index, "大王");list.add(index);index++;//编号自增poker.put(index, "小王");list.add(index);//54张牌0-53编号,满了//洗牌(洗的是编号index),用Collections的shuffle()方法实现Collections.shuffle(list);//发牌:将每个人以及底牌设计,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌给3个玩家。
//存放的过程中要求数字大小与斗地主规则的大小对应排序。将代表不同纸牌的数字分配给不同的玩家与底牌。//创建TreeSet集合接收排序的牌(编号)TreeSet<Integer> aSet = new TreeSet<Integer>();TreeSet<Integer> bSet = new TreeSet<Integer>();TreeSet<Integer> cSet = new TreeSet<Integer>();TreeSet<Integer> dpSet = new TreeSet<Integer>();//底牌
//遍历发牌for (int i = 0; i < list.size(); i++) {int x = list.get(i);if (i >= list.size() - 3) {dpSet.add(x);//最后三张牌给到底牌} else if (i % 3 == 0) {aSet.add(x);//编号对3取余,若余数为0给到玩家a} else if (i % 3 == 1) {bSet.add(x);//编号对3取余,若余数为1给到玩家b} else if (i % 3 == 2) {cSet.add(x);//编号对3取余,若余数为2给到玩家c}}// 看牌:通过Map集合找到对应字符展示。通过查询纸牌与数字的对应关系,
// 由数字转成纸牌字符串再进行展示。*///因为调用的方法相同,所以可以先定义一个方法,调用方法即可
//调用看牌方法lookPoker("路人A", aSet, poker);lookPoker("路人B", bSet, poker);lookPoker("路人C", cSet, poker);lookPoker("底牌", dpSet, poker);}public static void lookPoker (String name, TreeSet < Integer > ts, HashMap< Integer, String > poker){System.out.print(name+"的牌是:");//不分行for (Integer key : ts) {String y = poker.get(key);System.out.print(y+" ");//不分行}System.out.println();//间隔}}

结果:


路人A的牌是:♥3 ♥4 ♥8 ♥Q ♠K ♦2 ♦4 ♦5 ♦K ♦Q ♦J ♣7 ♣9 ♣10 ♣Q ♣J 大王 
路人B的牌是:♥2 ♥5 ♥6 ♥7 ♥9 ♥K ♠4 ♠8 ♠J ♠A ♦7 ♦8 ♦10 ♦A ♣2 ♣3 ♣6 
路人C的牌是:♥10 ♥J ♥A ♠2 ♠3 ♠5 ♠6 ♠7 ♠9 ♠10 ♦3 ♦6 ♦9 ♣4 ♣8 ♣A 小王 
底牌的牌是:♠Q ♣5 ♣K 进程已结束,退出代码 0

4.【1】将以下车站对应关系的数据存储到map集合中,
key:表示站编号,value:表示站名,
并遍历打印(可以不按顺序打印):
------------------------------------    
     站编号和站名对应关系如下:
    1 朱辛庄
    2 育知路
    3 平西府
    4 回龙观东大街
    5 霍营
    6 育新
    7 西小口
    8 永泰庄
    9 林萃桥
    10 森林公园南门
    11 奥林匹克公园
    12 奥体中心
    13 北土城
    14 安华桥
    15 安德里北街
    16 鼓楼大街
    17 什刹海
    18 南锣鼓巷
    19 中国美术馆   
------------------------------------    

代码:

package com.B.Container_13.Map.Practice;import java.util.TreeMap;//1.将以下车站对应关系的数据存储到map集合中,
//key:表示站编号,value:表示站名,
//并遍历打印(可以不按顺序打印):
public class A9 {public static void main(String[] args) {
//        创建对象TreeMap<Integer, String> station = new TreeMap<>();//put(K key, V value) 将指定的值与该映射中的指定键相关联station.put(1,"朱辛庄");station.put(2,"育知路");station.put(3,"平西府");station.put(4,"回龙观东大街");station.put(5,"霍营");station.put(6,"育新");station.put(7,"西小口");station.put(8,"永泰庄");station.put(9,"林萃桥");station.put(10,"森林公园南门");station.put(11," 奥林匹克公园");station.put(12,"奥体中心");station.put(13,"北土城");station.put(14,"安华桥");station.put(15,"安德里北街");station.put(16,"鼓楼大街");station.put(17,"什刹海");station.put(18,"南锣鼓巷");station.put(19,"中国美术馆");//输出System.out.println(station);}
}

输出:{1=朱辛庄, 2=育知路, 3=平西府, 4=回龙观东大街, 5=霍营, 6=育新, 7=西小口, 8=永泰庄, 9=林萃桥, 10=森林公园南门, 11= 奥林匹克公园, 12=奥体中心, 13=北土城, 14=安华桥, 15=安德里北街, 16=鼓楼大街, 17=什刹海, 18=南锣鼓巷, 19=中国美术馆}进程已结束,退出代码 0

【2】计算地铁票价规则:
总行程 3站内(包含3站)收费3元,
3站以上但不超过5站(包含5站)的收费4元,
5站以上的,在4元的基础上,每多1站增加2元,
10元封顶;

需要对键盘录入的上车站
和到达站进行判断,如果没有该站,
提示重新输入,直到站名存在为止
每站需要2分钟

示范如下:
-------------------------------------
请输入上车站:
    流沙河
     
    您输入的上车站:流沙河站不存在,请重新输入上车站:
    骑龙
    
    您输入的上车站:骑龙站不存在,请重新输入上车站:
    朱辛庄
    您以确定在朱辛庄上站!
    
    请输入到达站:
    沙河
    
    您输入的到达站:沙河站不存在,请重新输入到达站:
    西二旗
     
    您输入的到达站:西二旗站不存在,请重新输入到达站:
    西小口
    您以确定在朱辛庄下站!
    
    从朱辛庄到西小口共经过6站收费6元,大约需要12分钟
-----------------------------------------------

完整代码:

package com.B.Container_13.Map.Practice;import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;//1.将以下车站对应关系的数据存储到map集合中,
//key:表示站编号,value:表示站名,
//并遍历打印(可以不按顺序打印):
public class A9 {public static void main(String[] args) {
//        创建对象TreeMap<Integer, String> station = new TreeMap<>();//put(K key, V value) 将指定的值与该映射中的指定键相关联station.put(1, "朱辛庄");station.put(2, "育知路");station.put(3, "平西府");station.put(4, "回龙观东大街");station.put(5, "霍营");station.put(6, "育新");station.put(7, "西小口");station.put(8, "永泰庄");station.put(9, "林萃桥");station.put(10, "森林公园南门");station.put(11, " 奥林匹克公园");station.put(12, "奥体中心");station.put(13, "北土城");station.put(14, "安华桥");station.put(15, "安德里北街");station.put(16, "鼓楼大街");station.put(17, "什刹海");station.put(18, "南锣鼓巷");station.put(19, "中国美术馆");//输出System.out.println(station);//通过值(车站名)来查询// 获取上车站Scanner sc = new Scanner(System.in);String start;String end;while (true) {System.out.println("请输入上车站:");start = sc.nextLine();if (station.containsValue(start)) {break;} else {System.out.println("您输入的上车站:" + start + "站不存在,请重新输入上车站");}}
// 获取下车站while (true) {System.out.println("请输入到达站:");end = sc.nextLine();if (station.containsValue(end)) {break;} else {System.out.println("您输入的到达站:" + end + "站不存在,请重新输入到达站");}}// 获取站点编号及间隔差int iStart = 0;int iEnd = 0;int iSub;Set<Integer> sKey = station.keySet();for (Integer i : sKey) {if (start.equals(station.get(i))) {iStart = i;}if (end.equals(station.get(i))) {iEnd = i;}}if (iStart > iEnd) {iSub = iStart - iEnd;} else {iSub = iEnd - iStart;}// 计算金额int price;if (iSub <= 3) {price = 3;//总行程 3站内(包含3站)收费3元,} else if (iSub <= 5) {price = 4;//3站以上但不超过5站(包含5站)的收费4元,} else {price = 4 + (iSub - 5) * 2;//5站以上的,在4元的基础上,每多1站增加2元,}// 10元封顶price = price > 10 ? 10 : price;// 计算时间int time = iSub * 2;System.out.println("从[" + start + "]到[" + end + "]共经过" + iSub + "站,收费" + price + "元,大约需要" + time + "分钟");}
}
{1=朱辛庄, 2=育知路, 3=平西府, 4=回龙观东大街, 5=霍营, 6=育新, 7=西小口, 8=永泰庄, 9=林萃桥, 10=森林公园南门, 11= 奥林匹克公园, 12=奥体中心, 13=北土城, 14=安华桥, 15=安德里北街, 16=鼓楼大街, 17=什刹海, 18=南锣鼓巷, 19=中国美术馆}
请输入上车站:
摩西摩西
您输入的上车站:摩西摩西站不存在,请重新输入上车站
请输入上车站:
快乐
您输入的上车站:快乐站不存在,请重新输入上车站
请输入上车站:
朱辛庄
请输入到达站:
愉悦
您输入的到达站:愉悦站不存在,请重新输入到达站
请输入到达站:
霍营
从[朱辛庄]到[霍营]共经过4站,收费4元,大约需要8分钟进程已结束,退出代码 0


http://chatgpt.dhexx.cn/article/q305WfjT.shtml

相关文章

Map集合中的四种遍历方式

1.Map接口的概述 &#xff08;1&#xff09;它是双列集合&#xff1b; &#xff08;2&#xff09;格式&#xff1a;Interface Map<k,v> K:键的类型 V&#xff1a;值得类型 &#xff08;3&#xff09;它的每个元素都包含一个键对象Key和值对象Value&#xff0c;并且他们…

Java中的Map集合以及Map集合遍历实例

文章目录 一、Map集合二、Map集合遍历实例 一、Map集合 Map<K,V>k是键&#xff0c;v是值 1、 将键映射到值的对象&#xff0c;一个映射不能包含重复的键&#xff0c;每个键最多只能映射的一个值 2、 实现类  a) HashMap  b) TreeMap 3、 Map集合和Collection集合的区别…

Map集合的四种遍历

Map集合的四种遍历 这里记录一下map集合的4种遍历&#xff1a; 第一种 得到所有的key–map.keySet() ,根据key拿到value–map.get(key) public static void main(String[] args) {Map<String, String> map new HashMap();map.put("1", "刘备");…

Map集合遍历的三种方式

Map集合遍历的三种方式 遍历Map集合的三种方式 键找值键值对Lambda表达式 方式一 : 键找值 先获取Map集合的全部键的Set集合遍历键的Set集合,然后通过键提取对应值 原理图 键找值涉及到的API 方法名称说明Set keySet()获取所有键的集合V get(Object key)根据键获取值 Map…

java中Map集合的四种遍历方式

java中Map集合的四种遍历方式 Map接口和Collection接口的集合不同,Map集合是双列的,Collection是单列的.Map集合将键映射到值的对象. 双列的集合遍历起来也是比较麻烦些的,特别是嵌套的map集合,这里说下MAP集合的四种遍历方式&#xff0c;并且以嵌套的hashMap集合为例, 遍历一…

如何遍历map集合

Map集合是基于java核心类——java.util中的&#xff1b; Map集合用于储存元素对&#xff0c;Map储存的是一对键值&#xff08;key和value&#xff09;&#xff0c;是通过key映射到它的value values() : 是获取集合中的所有的值----没有键&#xff0c;没有对应关系。 KeySet(…

Map集合常用的三种遍历方式

Map集合使用的是Key - Value的形式存储元素&#xff0c;也就是键值对的形式。Map集合内部的实现分别是HashMap和TreeMap&#xff0c;也就是哈希表和二叉树这两种数据结构。List集合和Set集合都是继承自Collection类&#xff0c;而Map集合就是自己的父类。前者可以直接通过Itera…

Map集合遍历方式

Map集合遍历方式一&#xff1a;键找值 先获取Map集合的全部键的Set集合 //Set keymap.keySet();遍历键的Set集合&#xff0c;然后通过键提取对应值map.getValue() Set<String> keysmaps.keySet();for(String key1:keys){int valu1emaps.get(key1);System.out.println(ke…

MAP集合的遍历方式

简单场景&#xff1a;map集合存放为数字星期 如图&#xff1a; 代码&#xff1a; Map<Integer, String> map new HashMap<>(); map.put(1, "星期一"); map.put(2, "星期二"); map.put(3, "星期三"); map.put(4, "星期四&quo…

Map集合遍历的四种方式

1.通过Map.keySet获取key的Set集合&#xff0c;之后在通过key进行遍历 2.通过Map.values获取所有value&#xff0c;之后再进行遍历 3.通过Map.entrySet获取Set集合&#xff0c;之后通过iterator进行遍历 4.直接通过foreach对Map.entrySet获取的Set集合进遍历 案例&#…

lstm结构图_LSTM模型结构的可视化

目录: 1、传统的BP网络和CNN网络 2、LSTM网络 3、LSTM的输入结构 4、pytorch中的LSTM 4.1 pytorch中定义的LSTM模型 4.2 喂给LSTM的数据格式 4.3 LSTM的output格式 5、LSTM和其他网络组合 最近在学习LSTM应用在时间序列的预测上,但是遇到一个很大的问题就是LSTM在传统BP网络上…

LSTM模型详解

&#xff08;一&#xff09;LSTM模型理解 1.长短期记忆模型&#xff08;long-short term memory&#xff09;是一种特殊的RNN模型&#xff0c;是为了解决RNN模型梯度弥散的问题而提出的&#xff1b;在传统的RNN中&#xff0c;训练算法使用的是BPTT&#xff0c;当时间比较长时&…

LSTM模型、双向LSTM模型以及模型输入输出的理解

循环神经网路&#xff08;RNN&#xff09;在工作时一个重要的优点在于&#xff0c;其能够在输入和输出序列之间的映射过程中利用上下文相关信息。然而不幸的是&#xff0c;标准的循环神经网络&#xff08;RNN&#xff09;能够存取的上下文信息范围很有限。这个问题就使得隐含层…

基于LSTM模型实现新闻分类

1、简述LSTM模型 LSTM是长短期记忆神经网络&#xff0c;根据论文检索数据大部分应用于分类、机器翻译、情感识别等场景&#xff0c;在文本中&#xff0c;主要使用tensorflow及keras&#xff0c;搭建LSTM模型实现新闻分类案例。&#xff08;只讨论和实现其模型的应用案例&#…

Pytorch实现的LSTM模型结构

LSTM模型结构 1、LSTM模型结构2、LSTM网络3、LSTM的输入结构4、Pytorch中的LSTM4.1、pytorch中定义的LSTM模型4.2、喂给LSTM的数据格式4.3、LSTM的output格式4.4 LSTM笔记 5、LSTM和其他网络组合 1、LSTM模型结构 BP网络和CNN网络没有时间维&#xff0c;和传统的机器学习算法理…

【RNN架构解析】LSTM 模型

LSTM 模型 前言1. LSTM 内部结构图2. Bi-LSTM 介绍3. LSTM 代码实现4. LSTM 优缺点前言 了解LSTM内部结构及计算公式.掌握Pytorch中LSTM工具的使用.了解LSTM的优势与缺点.LSTM(Long Short-Term Memory)也称长短时记忆结构, 它是传统RNN的变体, 与经典RNN相比能够有效捕捉长序…

Pytorch LSTM模型 参数详解

本文主要依据 Pytorch 中LSTM官方文档&#xff0c;对其中的模型参数、输入、输出进行详细解释。 目录 基本原理 模型参数 Parameters 输入Inputs: input, (h_0, c_0) 输出Outputs: output, (h_n, c_n) 变量Variables 备注 基本原理 首先我们看下面这个LSTM图&#xff0c; 对…

猿创征文丨深度学习基于双向LSTM模型完成文本分类任务

大家好&#xff0c;我是猿童学&#xff0c;本期猿创征文的第三期&#xff0c;也是最后一期&#xff0c;给大家带来神经网络中的循环神经网络案例&#xff0c;基于双向LSTM模型完成文本分类任务&#xff0c;数据集来自kaggle&#xff0c;对电影评论进行文本分类。 电影评论可以蕴…

LSTM模型参数解释

其中&#xff0c;input_size(输入张量x的维度)6&#xff0c;hidden_size(隐藏层的维度&#xff0c; 隐藏层的神经元个数)6&#xff0c;num_layer(隐藏层层数)2 train loss与test loss结果分析&#xff1a; train loss 不断下降&#xff0c;test loss不断下降&#xff0c;说明网…

【用pytorch进行LSTM模型的学习】

用pytorch进行LSTM模型的学习 LSTM模型用pytorch&#xff0c;采用LSTM对seaborn数据集做预测基本步骤数据的观察特殊数据处理数据归一化模型的构建与选择模型的保存 飞机航班流量预测示例 LSTM模型 LSTM模型长下面这样&#xff0c;主要用在时间序列的预测&#xff0c;具有比RN…