11.comparator比较器 && comparable
外部排序 VS 内部排序
方法 compare equals vs 类内置自动排序实现 comparableto
1.方法:static <T> void sort(List<T> list, Comparator<? super T> c)->将集合中的元素按照指定规则排序 2.Comparator比较器 a.方法: int compare(T o1,T o2) o1-o2 -> 升序 o2-o1 -> 降序
1.接口:Comparable接口 2.方法: int compareTo(T o) -> this-o (升序) o-this(降序)
Comparator | Comparable | |
---|---|---|
定义位置 | 外部类(不修改对象本身) | 对象自身(需实现 compareTo ) |
灵活性 | 可定义多种排序规则 | 只能有一个自然排序规则 |
适用场景 | 临时排序、多条件排序、第三方类 | 对象的自然排序(如 Integer ) |
线程安全 | 通常线程安全(无状态) | 取决于对象本身 |
-> 深入了解 lambda* 结合 静态方式链表
12.斗地主代码案例
案例分析
- 准备牌: 牌可以设计为一个ArrayList<String>,每个字符串为一张牌。 每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。 牌由Collections类的shuffle方法进行随机排序。 - 发牌 将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。 - 看牌 直接打印每个集合。
代码思路
1.创建ArrayList集合-> color -> 专门存花色 2.创建一个ArrayList集合 -> number -> 专门存牌号 3.创建一个ArrayList集合 -> poker -> 专门存花色和牌号组合好的牌面 4.打乱poker 5.创建4个ArrayList集合,分别代表三个玩家,以及存储一个底牌 6.如果index为最后三张,往dipai集合中存 7.如果index%3==0 给p1 8.如果index%3==1 给p2 9.如果index%3==2 给p3 10.遍历看牌
-> 培养思维
13.哈希值
hashcode
快速查找hashmap hash值 hash
14.Hashset
特点: 无序 不重复 应用: 去重 唯一性校验
15.set
实现类:
-> 14.HASHSET
LinkedHashSet
->6.Treeset
16.泛型通配符
PECS = Producer Extends, Consumer Super
通配符 | 含义 | 典型场景 |
---|---|---|
<?> | 任意类型(只读) | 通用集合打印、元素判断 |
<? extends T> | 类型上限(T 及其子类,只读) | 读取继承体系中的数据 |
<? super T> | 类型下限(T 及其父类,只写) | 向继承体系中写入数据 |
小结 -2
模块19回顾: 1.Collections集合工具类 方法: addAll-> 批量添加元素 shuffle-> 元素打乱 sort->排序-> ascii sort(集合,比较器)-> 按照指定的顺序排序 2.泛型: a.含有泛型的类: public class 类名<E>{} new对象的时候确定类型 b.含有泛型的方法: 修饰符 <E> 返回值类型 方法名(E e){} 调用的时候确定类型 c.含有泛型的接口 public interface 接口名<E>{} 在实现类的时候确定类型 在实现类的时候还没有确定类型,只能new对象的时候确定 d.泛型通配符 <? extends 类型> ?接收的泛型类型是后面类的本类以及子类 <? super 类型> ?接收的泛型类型是后面类的本类以及父类 3.哈希值:计算机计算出来的十进制数,可以看成是对象的地址值 a.要是没有重写hashCode方法,默认调用Object中的hashCode方法,计算的是对象的哈希值 b.要是重写了hashCode方法,计算的是对象内容的哈希值 4.HashSet集合 特点: 元素唯一 无序 无索引 线程不安全 数据结构: 哈希表 = 数组+链表+红黑树 5.LinkedHashSet 特点:元素唯一 有序 无索引 线程不安全 数据结构: 哈希表+双向链表 6.set存储自定义对象怎么去重复 -> 重写hashCode和equals方法 7.去重复过程:先比较元素哈希值,再比较内容 如果哈希值不一样,存 如果哈希值一样,再比较内容->哈希值一样,内容不一样,存;哈希值一样,内容一样,去重复 模块20重点: 1.会使用HashMap和LinkedHashMap以及知道他们的特点 2.会使用Properties属性集 3.会操作集合嵌套 4.知道哈希表结构存储元素过程