简介
- TreeSet集合(★)
- 排序算法
- 查找算法
- Map集合
- 集合嵌套
-
TreeSet集合
1.1集合体系(单列集合)
Collection
不包含重复元素的集合【元素唯一】
- 没有带索引的方法【无索引】
可以按照指定的规则进行排序【可以排序】
使用步骤:
- 使用空参构造创建TreeSet集合对象
- 存储元素所在的类需要实现Comparable接口
- 重写Comparable接口中的抽象方法compareTo方法,指定排序规则
compareTo方法如何指定排序规则:
TreeSet的带参构造方法使用的是“比较器排序”对元素进行排序
- 比较器排序,就是让TreeSet集合构造方法接收Comparator接口的实现类对象
- 重写Comparator接口中的compare(T o1,T o2)方法,指定配许规则
注意:o1代表的是当前往集合中添加的元素,o2代表的是集合中已经存在的元素,排序原理与自然排序相同
两种排序的区别
- 自然排序:自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序
- 比较器排序:创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行排序
- 如果java提供好的类已经定义了自然排序规则,那么我们可以使用比较器排序进行替换
- 注意:如果自然排序喝比较器排序都存在,优先使用比较器排序
两种方式中,关于返回值的规则:
Colletions工具类介绍
- java.util.Collections是集合的工具类,里面提供了静态方法来操作集合,乱序,排序
shuffle方法
public static
void sort(LIst list):对集合中的元素自然排序 - 该方法只能对List集合进行排序
- 从方法中泛型分析可知,集合中元素类型必须是Comparable的子类型
public static
void sort(LIst list,Comparator<? super T> c) 在JDK5中提供了可变参数,允许在调用方法时传入任意个参数。可变参数原理就是一个数组形式存在
- 格式:修饰符 返回值类型 方法名 (数据类型 … 变量名){ }
- 举例:public void show(int …num):表达式该方法可以接收任意个整数值
-
可变参数注意:
可变参数只能作为方法的最后一个参数,但其前面可以有或没有任何其他参数
可变参数本质上是数组,不能作为方法的重载。如果同时出现相同类型的数组和可变参数方法,是不能编译通过的
可变参数的使用:
调用可变参数方法,可以给出0到任意多个参数,编译器会将可变参数转化为一个数组,也可以直接传递一个数组。方法内部使用时直接当作数组使用即可。
addAll方法
static
boolean addAll(Collection<? super T> c ,T…elements):添加任意多个数据到集合中 - 该方法就是一个含有可变参数的方法,使用时可以传入任意多个实参,使用方便!
- 分析:Collection<?super T>,?可以是T的类型或者父类型,反过来,T是?类型或者子类型
(当你确定?的类型,也就是集合的类型,就可以往集合中添加此类型或者子类型)
排序,查找算法
冒泡排序
- 冒泡排序:将一组数据按照从小到大的顺序进行排序
-
选择排序
选择排序原理:它的工作原理是每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
注意事项:
原理:每次去掉一般的查找范围
- 前提:数组必须有序
★★★Map集合
1.TreeSet集合(底层:红黑树,可以对元素进行排序
特点:
1)自然排序: Comparable接口
2)比较器排序:Comparator接口
两种排序方式都存在,我们优先使用Comparator接口(比较器排序)2.Collections集合的工具类(单列集合)
- public static void shuffle(List<?> list ):对List集合中的元素乱序
- public static
void sort(List list ):对List集合中元素进行自然排序 - public static
void sort(List list ,Comparator<? super T>):对List集合中元素进行自然排序 ★★public static
boolean addAll(Collection c ,E…e):往集合中批量添加元素 3.排序查找算法(思想掌握)
冒泡排序
- 选择排序
- 二分查找
4.Map接口(双列集合)重点★★★
Map集合的介绍
java.util.Map
集合,里面保存的数据是成对存在的,称之为双列集合。存储的数据,我们称为键值对。 特点
Map
K:键的数据类型;V:值的数据类型 - 特点:
- 键不能重复,值可以重复
- 键和值是一一对应的,通过键可以找到对应的值
- (键和值)一起是一个整体,我们称之为“键值对”或者“键值对对象”在java中叫做“Entry”对象
使用场景:
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的底层是红黑树实现的,有排序的能力,键去重。
- 可以自然排序(键所在的类要实现Comparable)
- 若自定义类没有自然排序功能,或自然排序功能不满足要求时。可以自定义比较器排序(Comparator)
集合的嵌套