main map java_Java从入门到实战之(12)Map示例大全(一)
发布日期:2022-02-03 13:17:04 浏览次数:10 分类:技术文章

本文共 14189 字,大约阅读时间需要 47 分钟。

集合嵌套

集合嵌套并不是一个新的知识点,仅仅是集合内容又是集合,如单列集合嵌套、双列集合与单列集合嵌套、双列集合嵌套。

单列集合嵌套:

大学(List表示)有多个分校(list表示),每个分校有多个班级(字符串)。

双列集合与单列集合嵌套

大学(Map表示,key:分校名称、value:分校集合)

有多个分校(List表示)

每个分校有多个班级(字符串)。

双列集合嵌套

大学(Map表示,key:分校名称、value:分校集合)

有多个分校(Map表示,key:班级名称、value 班级对象)

每个分校有多个班级(自定义班级类MyClass)。

如Collection集合嵌套、Collection集合与Map集合相互嵌套、Map集合嵌套。

ArrayList嵌套 ArrayList

ArrayList< ArrayList >

Collection< ArrayList >

Map嵌套 ArrayList

HashMap>

ArrayList< HashMap>

Map集合嵌套

HashMap>

HashMap>

模拟斗地主洗牌发牌

5.1 案例介绍

按照斗地主的规则,完成洗牌发牌的动作。

具体规则:

1. 组装54张扑克牌

2. 将54张牌顺序打乱

3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。

4. 查看三人各自手中的牌(按照牌的大小排序)、底牌

手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

具体代码逻辑如下:这是ArrayList集合的一个很好的接近实际意义的练习实战。对于新手来说,可能确实有点难,

但这只是最基础的练习。如果真想在这个行业干下去,请加强这些基础的练习。这些仅仅只是基础,在实际开发中,比这更难,

只有先从最基础的最基本的做起,实际开发,其实很多都是由这些最基础的知识去完成的。只是也相对的加了一些逻辑业务。

但不管怎么样,还是这句话,基础是关键,加油!不放弃,不抛弃!相信自己,你可以的。人生的酸甜苦辣,哪位成功的人士没有经历过呢?谁没有点这些风风雨雨的经历,只有经历这些大风大浪,才有可能成功。对自己说:come on!!!!!!!!!!!!

packagecn.arrays;importjava.util.ArrayList;importjava.util.Collections;importjava.util.HashMap;/*要修改java文件编码,由GBK修改为UTF-8,

因为默认的字符编码GBK没有我们要的梅花、方片、黑桃、红桃(♠♥♦♣)等特殊字符。*/

public classPorker {public static voidmain(String[] args) {//准备花色,创建ArrayList集合

ArrayList color = new ArrayList();//添加红 黑 梅花 方块 四种元素

color.add("♠");

color.add("♥");

color.add("♦");

color.add("♣");//准备数字,创建arrayList对象

ArrayList number = new ArrayList();//Collections工具

Collections.addAll(number,"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2");//定义一个map集合:用来将数字与每一张牌进行对应

HashMap map = new HashMap();int index = 0;//加入大小王

map.put(index++, "小☺");

map.put(index++, "大☻");//对这些数字进行遍历,arrayList的嵌套遍历

for(String thisNumber : number) {//对颜色进行遍历

for(String thisColor : color) {//添加到map集合对象中

map.put(index++, thisColor +thisNumber);

}

}//这样一副牌就准备好了,输出这副牌,可以查看下

System.out.println(map);//一副54张的牌 ArrayList里边为0-53的数的新牌

ArrayList cards = new ArrayList();for (int i = 0; i <= 53; i++) {

cards.add(i);

}//控制台查看这53个数字//System.out.println(cards);//洗牌,自然排序,即随机排序的

Collections.shuffle(cards);

System.out.println(cards);//创建三个玩家和底牌

ArrayList iPlayer = new ArrayList();

ArrayList iPlayer2 = new ArrayList();

ArrayList iPlayer3 = new ArrayList();

ArrayList itCards = new ArrayList();//遍历这副洗好的牌,遍历过程中,将牌发到三个玩家和底牌中

for (int i = 0; i < cards.size(); i++) {//如果i大于等于51

if (i >= 51) {//将其中的三张加入到底牌中

itCards.add(cards.get(i));

}else{//否则这51张牌平分给三位玩家

if (i % 3 == 0) {//玩家一获得的牌

iPlayer.add(cards.get(i));

}else if (i % 3 == 1) {//玩家二获得的牌

iPlayer2.add(cards.get(i));

}else{//玩家三获得的牌

iPlayer3.add(cards.get(i));

}

}

}//对每个人手中的牌排序,随机排序

Collections.sort(iPlayer);

Collections.sort(iPlayer2);

Collections.sort(iPlayer3);//对应数字形式的每个人手中的牌,定义字符串形式的牌

ArrayList sPlayer = new ArrayList();

ArrayList sPlayer2 = new ArrayList();

ArrayList sPlayer3 = new ArrayList();

ArrayList sCards = new ArrayList();//对三位玩家的牌进行遍历

for(Integer key : iPlayer) {

sPlayer.add(map.get(key));

}for(Integer key : iPlayer2) {

sPlayer2.add(map.get(key));

}for(Integer key : iPlayer3) {

sPlayer3.add(map.get(key));

}//对底牌进行遍历

for(Integer key : itCards) {

sCards.add(map.get(key));

}//最终: 看牌,各玩家查看自己的牌

System.out.println("玩家一的牌" + sPlayer); //System.out.println("玩家二的牌" +sPlayer2);

System.out.println("玩家三的牌" +sPlayer3);

System.out.println("底牌" +sCards);

}

}

掌握Arrays类的常用方法;

题目:

1) 定义类,定义main()方法,按以下要求编写代码:

定义int数组,初始化为:{235,676,90,3,43,65,52,34,36,,776,9,86}

调用Arrays类的相关方法对数组进行升序排序;

调用Arrays类的查找方法,在数组中查找元素:776,并打印查找结果;

调用Arrays类的toString()方法打印这个int数组

6.1.2 冒泡排序、选择排序、二分查找的程序实现;

6.1.3 简述什么是Map集合,最常用的操作有哪些

6.1.4 参照集合体系图,说出所有常用集合及常用集合的相关方法

6.1.5 产生10个1-20之间的随机数要求随机数不能重复案例。

6.1.6 键盘录入多个数据在控制台输出最大值案例。

6.1.7 ArrayList集合的toString()方法源码阅读

6.1.8 键盘录入多个数据,按数据从小到大的顺序打印到控制台。

6.1.9 熟练使用带可变参数的方法(提示:Arrays类与Collections各一个)

6.1.10 描述4种数据结构的特点

数组结构:一块连续的存储区域

链表结构:每个元素指向下一个元素

队列结构:容器先进先出的规则

栈结构:容器先进后出规则

6.1.11 请你统计出,每个字母出现的次数.

importjava.util.HashMap;importjava.util.Map.Entry;importjava.util.Set;/** String s = "aliajflajfajfkjlajoiwpreiepoeroiewhroagflmslkgnmlkcnksahfoaphgnkjfia";

*

* 请你统计出,每个字母出现的次数.

* a - 2

* l - 1

* i - 1

* j - 1

*

* 1.遍历字符串

* 2.保存到map 中 , 字母作为键 Character ,次数作为值 Integer

* 3.map ,即是结果, 遍历 map .

**/

public classTest {public static voidmain(String[] args) {

String s= "aliajflajfajfkjlajoiwpreiepoeroiewhroagflmslkgnmlkcnksahfoaphgnkjfia";//创建map

HashMap hashMap = new HashMap<>();//1.遍历字符串

for (int i = 0; i < s.length() ; i++) {char key = s.charAt(i); //ch 为每一个字母.//2.保存到map 中 , 字母作为键 Character ,次数作为值 Integer//判断 是否包含key , 再保存.

if(hashMap.containsKey(key)) {//包含,存过//Integer count = hashMap.get(key);//获取之前次数,//count++;//+ 1

hashMap.put(key, hashMap.get(key)+ 1); //再 保存

}else{//不包含 , 第一次存.

hashMap.put(key,1);

}

}//3. 遍历map

Set> entrySet =hashMap.entrySet();

System.out.println("字母 -- 次数 ");for (Entryentry : entrySet) {

System.out.println(entry.getKey()+" -- "+entry.getValue());

}

}

}

6.2 代码题:

6.2.1 创建一个Map集合,添加数据进行测试,使用Map集合的两种遍历方式进行遍历

packageday09_Test基础练习题;importjava.util.HashMap;importjava.util.Map;importjava.util.Set;public classTest001 {//创建一个Map集合,添加数据进行测试,使用Map集合的两种遍历方式进行遍历

public static voidmain(String[] args) {

Map map = new HashMap();

map.put("李连杰", "男人");

map.put("林志玲", "女人");

map.put("泰国有", "人妖");//map集合第一种遍历方式

/*Set> set = map.entrySet();

for (Entry entry : set) {

String key = entry.getKey();

String value = entry.getValue();

System.out.println("key="+key+",value="+value);

}*/

//map集合第二种遍历方式

Set set =map.keySet();for(String key : set) {

String value=map.get(key);

System.out.println("key="+key+",value="+value);

}

}

}

6.2.2 Map集合(相同键与不同键)

定义一个测试类,在测试类中定义main()方法,按以下要求编写代码

1.实例化一个Map集合

2.向集合内添加以下内容:

"NO01","安森"

"NO01","凯特"

"NO02","安森"

3.遍历集合,观察打印结果,请说明

4.如果存储“相同的键”时,会发生什么情况

5.如果存储“不同的键”,“相同的值”时,会怎样?

packageday09_Test基础练习题;importjava.util.HashMap;importjava.util.Map;importjava.util.Map.Entry;importjava.util.Set;public classTest002 {public static voidmain(String[] args) {

Map map = new HashMap<>();

map.put("NO01", "安森");

map.put("NO02", "凯特");

map.put("NO03", "安森");

Set> entrySet =map.entrySet();for (Entryentry : entrySet) {

String key=entry.getKey();

String value=entry.getValue();

System.out.println("key="+key+",value="+value);

}

System.out.println("---------------存储相同的键-------------------------");

map.put("NO01", "李安");//查看map

System.out.println(map);//将原先的值给覆盖了

System.out.println("---------------存储不同的键---------------------");

map.put("NO09", "008");//查看此时的map

System.out.println(map);//存储到Map中了

}

}

6.2.3 遍历Map

定义Student类,要求有如下成员:

成员属性(私有):

姓名(String类型)

性别(String类型)

年龄(int 类型)

构造方法:

无参

全参

成员方法:

get/set方法

(有兴趣,可以将toString()方法也添加上)

定义类测试类,在测试类中定义main()方法,按以下要求编写代码:

实例化一个Map集合

向集合中添加以下元素:

“it001”,new Student(“王宝强”,’男’,20);

“it002”,new Student(“马蓉”,’女’,18);

“it003”,new Student(“宋喆”,’男’,19);

使用两种方式遍历这个Map

Student类:packageday09_Test基础练习题;public classStudent {privateString name;private charsex;private intage;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public chargetSex() {returnsex;

}public void setSex(charsex) {this.sex =sex;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}

@OverridepublicString toString() {return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]";

}publicStudent() {super();//TODO Auto-generated constructor stub

}public Student(String name, char sex, intage) {super();this.name =name;this.sex =sex;this.age =age;

}

}

packageday09_Test基础练习题;importjava.util.HashMap;importjava.util.Map;importjava.util.Map.Entry;importjava.util.Set;public classTest003 {public static voidmain(String[] args) {

Map map = new HashMap<>();

map.put("it001", new Student("王宝强", '男', 20));

map.put("it002", new Student("马蓉", '女', 18));

map.put("it003", new Student("宋哲", '男', 19));//第一种方式

/*Set keSet = map.keySet();

for (String key : keSet) {

Student student = map.get(key);

System.out.println("key="+key+",student的信息如下:"+student);

}*/

//第二种方式

Set> entrySet =map.entrySet();for (Entryentry : entrySet) {

String key=entry.getKey();

Student student=entry.getValue();

System.out.println("key="+key+",student的信息如下:"+student);

}

}

}

6.2.4 使用一种方式遍历集合,观察打印结果。怎样可以使这个集合判断出重复的键

定义类Cat类,要求有以下成员:

成员属性(私有):

姓名

性别

年龄

构造方法:

无参

全参

成员方法:

get/set方法

定义一个测试类,在测试类中定义main()方法:

l在main()中按以下要求编写代码:

实例化一个Map集合;

向集合中添加以下元素:

new Cat(“波斯猫”,’公’,2),”No01”

new Cat(“折耳猫”,’母’,1),”No02”

new Cat(“折耳猫”,’母’,1),”No03”

使用一种方式遍历集合,观察打印结果。怎样可以使这个集合判断出重复的键

packageday09_Test基础练习题;importjava.util.HashMap;importjava.util.Map;importjava.util.Map.Entry;importjava.util.Set;public classTest004 {public static voidmain(String[] args) {

Map map = new HashMap<>();

map.put(new Cat("波斯猫", '公', 2), "No01");

map.put(new Cat("折耳猫", '母', 1), "No02");

map.put(new Cat("折耳猫", '母', 1), "No03");//遍历

Set> entrySet =map.entrySet();for (Entryentry : entrySet) {

Cat cat=entry.getKey();

String value=entry.getValue();

System.out.println("Cat="+cat+",value="+value);

}

}

}

6.2.5 定义类,定义main()方法,按以下要求编写代码:定义一个ArrayList,添加一些整数;使用Collections类的相关方法将内部元素排序;定义一个HashSet,添加一些元素;请问是否可以使用同样的方式排序?为什么?将ArrayList内的元素打乱顺序;打印集合

packageday09_Test基础练习题;importjava.util.ArrayList;importjava.util.Collections;importjava.util.HashSet;public classTest005 {public static voidmain(String[] args) {

ArrayList list = new ArrayList<>();

list.add(11);

list.add(222);

list.add(3);

list.add(40);

list.add(5);//Collections.sort(list);

System.out.println("此时的list集合元素为:"+list);//HashSet

HashSet set = new HashSet<>();

set.add(23);

set.add(2);

set.add(203);

set.add(24);

set.add(3);

System.out.println("没有排序的set="+set);//Collections.sort(set);使用Collections集合的sort方法里面只能放入List集合,不能放入set集合//打印ArrayList集合

Collections.shuffle(list);

System.out.println("打乱顺序的list集合元素为:"+list);

}

}

6.2.6 定义一个Map,存储如下内容:增加一位新老师Allen教JDBC;Lucy改为教CoreJava,使用两种方式遍历集合;输出所有教JDBC的讲师

定义一个Map,存储如下内容:

老师  课程

Tom  CoreJava

John  Oracle

Susan Oracle

Jerry  JDBC

Jim  Unix

Kevin    JSP

Lucy  JSP

完成以下要求:

1).增加一位新老师Allen教JDBC;

2).Lucy改为教CoreJava

3).使用两种方式遍历集合;

4).输出所有教JDBC的讲师

packageday09_Test拓展三道编程题;importjava.util.HashMap;importjava.util.Map;importjava.util.Set;public classTest001 {/*.定义一个Map,存储如下内容:

老师 课程

Tom CoreJava

John Oracle

Susan Oracle

Jerry JDBC

Jim Unix

Kevin JSP

Lucy JSP

完成以下要求:

1).增加一位新老师Allen教JDBC;

2).Lucy改为教CoreJava

3).使用两种方式遍历集合;

4).输出所有教JDBC的讲师;*/

public static voidmain(String[] args) {

Map 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");//1).增加一位新老师Allen教JDBC;

map.put("Allen", "JDBC");//2).Lucy改为教CoreJava

map.put("Lucy", "CoreJava");//3).使用两种方式遍历集合;//--方式一:获取所有键的集合

Set keys =map.keySet();for(String k : keys){

System.out.println(k+ "," +map.get(k));

}//--方式二:获取所有键值对的集合

Set> entrySet =map.entrySet();for(Map.Entrye : entrySet){

System.out.println(e.getKey()+ "," +e.getValue());

}//4).输出所有教JDBC的讲师;

for(String k : keys){if(map.get(k).equals("JDBC")){

System.out.println("讲师:" + k + " 教JDBC");

}

}

}

}

6.2.7 静态方法,list集合

1.定义一个类Demo;

2.内部定义一个静态方法asList,此方法可以接收任意多的String类型参数,方法功能:将所有String参数的值存储到一个具有String泛型的List集合中,并将此集合返回;

3.在Demo类中定义main()方法,并调用asList方法获取返回值,并遍历集合

packageday09_Test拓展三道编程题;importjava.util.ArrayList;importjava.util.List;public classTest002 {/** 1.定义一个类Demo;

2.内部定义一个静态方法asList,此方法可以接收任意多的String类型参数,

方法功能:将所有String参数的值存储到一个具有String泛型的List集合

中,并将此集合返回;

3.在Demo类中定义main()方法,并调用asList方法获取返回值,并遍历集

合;*/

public static voidmain(String[] args) {

List strList = asList("Java","Oracle","MySql","JDBC","JSP","HTML","jQuery");for(String s : strList){

System.out.println(s);

}

}private static ListasList(String ... values) {

List strList = new ArrayList<>();for(String s : values){

strList.add(s);

}returnstrList;

}

}

6.2.8 抽到明牌者为地主

成龙,甄子丹,李连杰三个人打斗地主,三人约定,洗牌后,随机抽取一张"明牌"并夹在中间;然后依次抓牌,谁抓到这张便自动作为地主,并收取最后三张。

要求:请用程序实现这一过程,最后打印地主名,以及三个人的牌(要求排序);

思路:

1.定义一个Map集合存储一副扑克牌;List存储编号;

2.洗牌;

3.随机抽取一个索引(该值必须在倒数三张之前),用于表示"明牌",在发牌时谁抓到这一张便作为"地主";

4.依次给三个人(成龙,甄子丹,李连杰)发牌,并监督谁作为地主;地主自动收取最后三张。

5.打印地主名;

6.最后以排序后的方式打印每个人手里的牌

packageday09_Test拓展三道编程题;importjava.util.ArrayList;importjava.util.Collections;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Random;public classTest003 {/*成龙,甄子丹,李连杰三个人打斗地主,三人约定,洗牌后,随机抽取一张"明牌"并夹在中间;然后依次抓牌,谁抓到这张便自动作为地主,并收取最后三张。

要求:请用程序实现这一过程,最后打印地主名,以及三个人的牌(要求排序);

思路:

1.定义一个Map集合存储一副扑克牌;List存储编号;

2.洗牌;

3.随机抽取一个索引(该值必须在倒数三张之前),用于表示"明牌",在发牌

时谁抓到这一张便作为"地主";

4.依次给三个人(成龙,甄子丹,李连杰)发牌,并监督谁作为地主;地主自

动收取最后三张。

5.打印地主名;

6.最后以排序后的方式打印每个人手里的牌*/

public static voidmain(String[] args) {

String[] colors= {"♥","♦","♠","♣"};

String[] numbers= {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

Map pokerMap = new HashMap<>();

List indexList = new ArrayList<>();int index = 1;for(String n : numbers){for(String c : colors){

pokerMap.put(index, c+n);

indexList.add(index);

index++;

}

}

pokerMap.put(index,"小王");

indexList.add(index);

index++;

pokerMap.put(index,"大王");

indexList.add(index);//2.洗牌

Collections.shuffle(indexList);//3.随机抽取一张作为明牌

int flagIndex = -1;

Random rdm= newRandom();

flagIndex= rdm.nextInt(indexList.size() - 3);

System.out.println("明牌索引:" +flagIndex);//4.发牌

List chenglongList = new ArrayList<>();

List zhenzidanList = new ArrayList<>();

List lilianjieList = new ArrayList<>();int dizhu = 0;//1.成龙;2.甄子丹;3.李连杰

for(int i = 0;i < indexList.size() ; i++){if(i >= indexList.size() - 3){if(dizhu == 1){

chenglongList.add(indexList.get(i));

}else if(dizhu == 2){

zhenzidanList.add(indexList.get(i));

}else if(dizhu == 3){

lilianjieList.add(indexList.get(i));

}

}else{if(i % 3 == 0){

chenglongList.add(indexList.get(i));if(i ==flagIndex){

dizhu= 1;

System.out.println("地主:成龙");

}

}else if(i % 3 == 1){

zhenzidanList.add(indexList.get(i));if(i ==flagIndex){

dizhu= 2;

System.out.println("地主:甄子丹");

}

}else if(i % 3 == 2){

lilianjieList.add(indexList.get(i));if(i ==flagIndex){

dizhu= 3;

System.out.println("地主:李连杰");

}

}

}

}//排序

Collections.sort(chenglongList);

Collections.sort(zhenzidanList);

Collections.sort(lilianjieList);//看牌

System.out.println("成龙:" +lookPoker(chenglongList,pokerMap));

System.out.println("甄子丹:" +lookPoker(zhenzidanList,pokerMap));

System.out.println("李连杰:" +lookPoker(lilianjieList,pokerMap));

}public static String lookPoker(List list,MappokerMap){

StringBuffer buf= new StringBuffer("[");for(int i = 0;i < list.size() ; i++){

buf.append(pokerMap.get(list.get(i)));if(i < list.size() - 1){

buf.append(", ");

}

}

buf.append("]");returnbuf.toString();

}

}

转载地址:https://blog.csdn.net/weixin_34759094/article/details/114100741 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java中socket与多线程_Java Socket多线程编程、通信模型及socket协议详解
下一篇:c++由大到小输出所有的各位和小于6的三位整数_小学数学16年级所有重点知识点汇总,难得这么全了!...

发表评论

最新留言

很好
[***.229.124.182]2024年04月18日 01时18分31秒