Map集合常用的子类有两种: HashMap TreeMap
1.HashMap集合
注意:
Map集合都是针对键有效,且键是唯一的, 如果有相同的键,则第二个键的值覆盖掉第一个键的值,如果第一次给HashMap添加元素,则put()方法返回值为null,第二次添加相同键的元素,则返回第一次添加的元素的值
存储自定义对象的两种方式:
自定义对象为键 :不能重复 ,需要重写equals()和HashCode()两个方法
自定义对象为值 :可以重复
注释:
如果成员变量的值相同则认为是同一个人,即重复
HashMap底层依赖的是哈希表
哈希表依赖于两个方法:equals()和HashCode();
//自定义对象作为键,必须具有唯一性,输出不能保证顺序
面试题:
HashMap和HashTable的区别?
共同点:都是基于Map集合的实现类,都是哈希表的实现类HashTable :Map集合的子集合
HashMap集合的应用:
1). 输入字符串:aaasamslndlkda ,如何输出 a(5)s(2)d(2)k(1)l(2)m(1)n(1)
示例如图:
2).HashMap集合嵌套HashMap集合
2.LinkedHashMap集合
LinkedHashMap集合是Map接口基于哈希表和链表实现的
哈希表可保证键的唯一性
链表保证了元素的有序性(存储和取出一致)
3.TreeMap集合
TreeMap集合的两种排序方式:
自然排序:自定义的类实现Comparable接口,通过无参构造形式创建对象,并且重写ComparaTo()方法
比较器排序:通过public TreeSet(Comparator
比较器排序的两种方式:
1).创建实现类继承Comparator接口,并且重写Compare()方法
2).直接使用匿名内部类实现 ,重写Compare()方法,不用创建实现类
TreeSet集合保证元素是看ComparaTo()方法或者Compare()方法返回值是否为0;
TreeSet集合底层依赖于TreeMap集合的方法,存储方式为红黑树结构
4.Collections工具类
Collections和Collection的区别:
Collection:顶层次单列集合的根接口,它是一个集合,也是一个接口
Collections:是针对集合操作的工具类,里面包含了一些功能,随机置换,集合里面的二分
查找,将集合的元素进行反转
Collections集合的常用方法:
public static
public static T max(Collection coll): 获取集合中的最大值
public static void reverse(List> list) :将集合中的元素顺序反转
public static void shuffle(List> list) :将集合中的元素打乱
public static void sort(List<> list) :将集合中的元素进行排序
使用如图:
Collections类中的两种排序方式
1).自然排序
2).比较器排序
如图所示:
Collections工具类的应用
1).模拟斗地主的发牌和洗牌
思路:
1)创建一个牌盒(容器:集合)
ArrayList
2)装牌
定义花色数组和点数数组(A,K)
红桃A
黑桃A
梅花A
方片A
....
3)洗牌
Collections中的随机置换的功能
4)发牌
遍历集合(获取集合中的具体的牌)
需要判断:选择结构语句
1--->A 2--->B 3----C
4---A .................
斗地主三个玩
发个三个人----->三个人分别创建ArrayList
如果当前牌 % 3 ==0/1/2
5)看牌
三个人看牌:将看牌封装成一个功能(独立的 代码块)
代码如图:
2)模拟斗地主的发牌洗牌_保证牌有序
思路:
1)创建牌盒
创建两个集合:HashMap
2)装牌
定义花色数组
从0开始编号,将编号和编号对应的牌都存到HashMap集合中,同时往ArrayList
集合中单独存储编号
3)洗牌
洗的是编号
4)发牌
发的也是编号,为了保证牌有序,集合有TreeSet集合接收
5)看牌
封装功能
代码如图: