简介

  • TreeSet集合(★)
  • 排序算法
  • 查找算法
  • Map集合
  • 集合嵌套
  • 斗地主案例

    TreeSet集合

    1.1集合体系(单列集合)

  • Collection

    • List接口
      • ArrayList类
      • LinkedList类
    • Set接口
      • HashSet集合
      • TreeSet集合

        1.2TreeSet特点

  • 不包含重复元素的集合【元素唯一】

  • 没有带索引的方法【无索引】
  • 可以按照指定的规则进行排序【可以排序】

    • 如果TreeSet存储自定义对象,需要对自定义类进行指定排序规则(没有指定排序规则,运行则会报错)

      1.3排序规则

      自然排序:

  • 使用步骤:

    • 使用空参构造创建TreeSet集合对象
    • 存储元素所在的类需要实现Comparable接口
    • 重写Comparable接口中的抽象方法compareTo方法,指定排序规则
  • compareTo方法如何指定排序规则:

    • 此方法如果返回的是小于0,代表的是当前元素较小,需要放在左边
    • 此方法如果返回的是大于0,代表的是当前元素较大,需要放在右边
    • 此方法如果返回的是0,代表的是当前元素再集合中已经存在,不存储

      比较器排序

  • TreeSet的带参构造方法使用的是“比较器排序”对元素进行排序

  • 比较器排序,就是让TreeSet集合构造方法接收Comparator接口的实现类对象
  • 重写Comparator接口中的compare(T o1,T o2)方法,指定配许规则

注意:o1代表的是当前往集合中添加的元素,o2代表的是集合中已经存在的元素,排序原理与自然排序相同

两种排序的区别

  • 自然排序:自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序
  • 比较器排序:创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行排序
  • 如果java提供好的类已经定义了自然排序规则,那么我们可以使用比较器排序进行替换
  • 注意:如果自然排序喝比较器排序都存在,优先使用比较器排序
  • 两种方式中,关于返回值的规则:

    • 如果返回值为负数,表示当前存入的元素是较小值,存左边
    • 如果返回值为正数,表示当前存入的元素是较大值,存右边
    • 如果返回值为0,表示当前存入的元素跟集合中元素重复了,不存

      Collections单列集合工具类

  • Colletions工具类介绍

    • java.util.Collections是集合的工具类,里面提供了静态方法来操作集合,乱序,排序
  • shuffle方法

    • public static void shuffle(List<?> list)对集合中的元素进行打乱顺序
    • 集合中元素类型可以任意类型

      sort方法

  • public static void sort(LIst list):对集合中的元素自然排序

    • 该方法只能对List集合进行排序
    • 从方法中泛型分析可知,集合中元素类型必须是Comparable的子类型
  • public static void sort(LIst list,Comparator<? super T> c)

    • 方法只能对List集合排序
    • 对元素的类型没有要求
    • 需要定义一个比较器Comparator(规则和之前TreeSet时一样)
    • 使用场景:
      • List集合中的元素类型不具备自然排序能力(元素类型没有实现结果Comparable)
      • List集合中的元素类型具备自然排序能力,但是排序规则不是当前所需要的

        可变参数

        可变参数介绍:

  • 在JDK5中提供了可变参数,允许在调用方法时传入任意个参数。可变参数原理就是一个数组形式存在

  • 格式:修饰符 返回值类型 方法名 (数据类型 … 变量名){ }
  • 举例:public void show(int …num):表达式该方法可以接收任意个整数值
  • 原理:其实就是一个int类型的数组

    可变参数注意:

  • 可变参数只能作为方法的最后一个参数,但其前面可以有或没有任何其他参数

  • 可变参数本质上是数组,不能作为方法的重载。如果同时出现相同类型的数组和可变参数方法,是不能编译通过的

    可变参数的使用:

  • 调用可变参数方法,可以给出0到任意多个参数,编译器会将可变参数转化为一个数组,也可以直接传递一个数组。方法内部使用时直接当作数组使用即可。

    addAll方法

  • static boolean addAll(Collection<? super T> c ,T…elements):添加任意多个数据到集合中

    • 该方法就是一个含有可变参数的方法,使用时可以传入任意多个实参,使用方便!
    • 分析:Collection<?super T>,?可以是T的类型或者父类型,反过来,T是?类型或者子类型

(当你确定?的类型,也就是集合的类型,就可以往集合中添加此类型或者子类型)

排序,查找算法

冒泡排序

  • 冒泡排序:将一组数据按照从小到大的顺序进行排序
  • 冒泡排序原理:相邻元素两两做比较,大的元素往后放

    选择排序

  • 选择排序原理:它的工作原理是每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。

  • 注意事项:

    • 有n个元素,那么就要比较n-1轮次
    • 每一趟中都会选出一个最值元素,较前一趟少比较一次

      二分查找

  • 原理:每次去掉一般的查找范围

  • 前提:数组必须有序

    ★★★Map集合

    1.TreeSet集合(底层:红黑树,可以对元素进行排序

    特点:
    1)自然排序: Comparable接口
    2)比较器排序:Comparator接口
    两种排序方式都存在,我们优先使用Comparator接口(比较器排序)

    2.Collections集合的工具类(单列集合)

  1. public static void shuffle(List<?> list ):对List集合中的元素乱序
  2. public static void sort(List list ):对List集合中元素进行自然排序
  3. public static void sort(List list ,Comparator<? super T>):对List集合中元素进行自然排序
  4. ★★public static boolean addAll(Collection c ,E…e):往集合中批量添加元素

    3.排序查找算法(思想掌握)

  5. 冒泡排序

  6. 选择排序
  7. 二分查找

    4.Map接口(双列集合)重点★★★

    Map集合的介绍

  • java.util.Map集合,里面保存的数据是成对存在的,称之为双列集合。存储的数据,我们称为键值对。

    特点

  • MapK:键的数据类型;V:值的数据类型

  • 特点:
    • 键不能重复,值可以重复
    • 键和值是一一对应的,通过键可以找到对应的值
    • (键和值)一起是一个整体,我们称之为“键值对”或者“键值对对象”在java中叫做“Entry”对象
  • 使用场景:

    • 凡是要提示一一对应的数据时就可以Map集合

      常用实现类

  • HashMap:

    • 此前的HashSet底层实现就是HashMap完成的,HashSet保存的元素其实就是HashMap集合中保存的键,底层结构是哈希表结构,具有键唯一,无序特点。
  • LinkedHashMap:
    • 底层结构是有链表和哈希表结构,去重,有序
  • TreeMap:

    • 底层是有红黑树,去重,通过键排序

      常用方法

  • public V put(K key,V value):把指定的键与指定的值添加到Map集合中

  • public V remove(Object key):把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值
  • public V get(Object key):根据指定的键,在Map集合中获取对应的值
  • public Set keySet():获取Map集合中所有的键,存储到Set集合中
  • public boolean containKey(Object key):判断该集合中是否有此键

    Map集合的遍历

  • 键找值

  • 获取键值对对象,再找到键和值

    HashMap集合

  • 注意:HashMap集合,要想保证键唯一,那么键所在的类重写hashCode和equals方法

    LinkedHashMap集合

  • LinkedHashMap类,在最底层采用的数据结构:是链表+哈希表。

  • 特点:

    • 元素唯一
    • 元素有序

      TreeMap集合

  • TreeMap的底层是红黑树实现的,有排序的能力,键去重。

  • 可以自然排序(键所在的类要实现Comparable)
  • 若自定义类没有自然排序功能,或自然排序功能不满足要求时。可以自定义比较器排序(Comparator)

    集合的嵌套

  1. 单列集合嵌套双列集合
  2. 双列集合嵌套单列集合
  3. 双列集合嵌套双列集合!!★★

    List嵌套List

    List嵌套Map

    Map嵌套Map