多种方式Map集合遍历
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);}} } 青凌,亙瑤 羽灰,赤鳴 霍琊,游浩賢進程已結束,退出代碼 02.(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進程已結束,退出代碼 03.模擬斗地主洗牌發牌(爭取根據自己的思路在寫一遍)
/*
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 進程已結束,退出代碼 04.【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分鐘
-----------------------------------------------
完整代碼:
總結
以上是生活随笔為你收集整理的多种方式Map集合遍历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018-4-25mysql数据库基础
- 下一篇: 如何学好单片机?嵌入式第一门课