我在乐字节学习的第六天(Java)
2021-03-10 08:31
标签:生活 回车 put lse array 时间 职业 b2c ide 今天老师讲的是map集合,map集合遍历,断点调试 1、现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即 规则:手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3 } 我在乐字节学习的第六天(Java) 标签:生活 回车 put lse array 时间 职业 b2c ide 原文地址:https://blog.51cto.com/15050544/2566060一、MAP集合
java.util.Map
接口。
我们通过查看Map
接口描述,发现Map
接口下的集合与Collection
接口下的集合,它们存储数据的形式不同,如下图。
Collection
中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。Map
中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。Collection
中的集合称为单列集合,Map
中的集合称为双列集合。Map
中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
2、Map常用子类
HashMap
LinkedHashMap
3、Map接口中的常用方法public V put(K key, V value)
: 把指定的键与指定的值添加到Map集合中。public V remove(Object key)
: 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。public V get(Object key)
根据指定的键,在Map集合中获取对应的值。boolean containsKey(Object key)
判断集合中是否包含指定的键。public Set<K> keySet()
: 获取Map集合中所有的键,存储到Set集合中。public Set<Map.Entry<K,V>> entrySet()
: 获取到Map集合中所有的键值对对象的集合(Set集合)。
4、Map集合遍历方式一(通过键找值的方式)
键找值方式:即通过元素中的键,获取键所对应的值分析步骤:
1)获取Map中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。方法提示:keyset()
2)遍历键的Set集合,得到每一个键。
3)根据键,获取键所对应的值。方法提示:get(K key)
public class MapDemo01 {
public static void main(String[] args) {
//创建Map集合对象
HashMap
5、Map集合遍历方式二(键值对方式)
键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。操作步骤与图解:
1)获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法提示:entrySet()
。
2)遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象。
3)通过键值对(Entry)对象,获取Entry对象中的键与值。 方法提示:getkey() getValue()
public class MapDemo02 {
public static void main(String[] args) {
// 创建Map集合对象
HashMap
6、LinkedHashMap和Hashtable
我们知道HashMap保证成对元素唯一,并且查询速度很快,可是成对元素存放进去是没有顺序的,那么我们要保证有序可以使用HashMap的子类LinkedHashMap,它是链表和哈希表组合的一个数据存储结构。
Hashtable:底层也是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢,存储null值和null键。
Hashmap:底层是一个哈希表,是一个线程不安全的集合,是多线程集合,速度快,不能存储null值和null键,和vector一样,在java1.2之后被更先进的集合被取代(Hashmap和Arraylist等。
Hashtable的子类properties依然活跃在历史舞台,该集合是唯一一个和IO流相结合的集合。
二、Deguge断点调试
使用IDEA的断点调试功能,查看程序的运行过程
1、在有效代码行,点击行号右边的空白区域,设置断点,程序执行到断点将停止,我们可以手动来运行程序
2、点击Debug运行模式
3、程序停止在断点上不再执行,而IDEA最下方打开了Debug调试窗口
4、Debug调试窗口介绍
5、快捷键F8,代码向下执行一行,第九行执行完毕,执行到第10行(第10行还未执行)
6、切换到控制台面板,控制台显示 请录入一个字符串: 并且等待键盘录入
7、快捷键F8,程序继续向后执行,执行键盘录入操作,在控制台录入数据 ababcea
回车之后效果:
调试界面效果:
8、 此时到达findChar方法,快捷键F7,进入方法findChar
9、快捷键F8 接续执行,创建了map对象,变量区域显示
10、快捷键F8 接续执行,进入到循环中,循环变量i为 0,F8再继续执行,就获取到变量c赋值为字符‘a’ 字节值97
11、快捷键F8 接续执行,进入到判断语句中,因为该字符 不在Map集合键集中,再按F8执行,进入该判断中
12、快捷键F8 接续执行,循环结束,进入下次循环,此时map中已经添加一对儿元素
13、快捷键F8 接续执行,进入下次循环,再继续上面的操作,我们就可以看到代码每次是如何执行的了
14、如果不想继续debug,那么可以使用快捷键F9,程序正常执行到结束,程序结果在控制台显示
三、斗地主洗牌算法
按照斗地主的规则,完成洗牌发牌的动作。
具体规则:
1、组装54张扑克牌将
2、54张牌顺序打乱
3、三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
4、查看三人各自手中的牌(按照牌的大小排序)、底牌
public class Poker {
public static void main(String[] args) {
/*
*/
// 1.1 创建Map集合存储
HashMap
// 1.2 创建 花色集合 与 数字集合
ArrayList
ArrayList // 1.3 存储 花色 与数字
Collections.addAll(colors, "?", "?", "?", "?");
Collections.addAll(numbers, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
// 设置 存储编号变量
int count = 1;
pokerMap.put(count++, "大王");
pokerMap.put(count++, "小王");
// 1.4 创建牌 存储到map集合中
for (String number : numbers) {
for (String color : colors) {
String card = color + number;
pokerMap.put(count++, card);
}
}
/*
* 2 将54张牌顺序打乱
*/
// 取出编号 集合
Set