单列集合 不去重的情况下
ArrayList 基于数组的 查询多
LinkedList 基于双向链表的 增删多
去重的情况下
哈希表的组成 JDK8之前数组链表 JDK8以后 数组链表红黑树
HashSet 基于哈希表 但是无序 源代码是new了个 HashMap
LinkedHashSet 基于哈希表跟双链表 有序
如果想对集合的元素排序
TreeSet 基于红黑树 特殊的二叉查找树
Compareable一般是写在实体类
Comparator一般是写在测试类
源代码是new了个 TreeMap
如果存入自定义类型对象 唯一性同样需要重写 hashCode和equals()
在重写equals()后,一定要重写hashCode()方法
equals相等,hashcode相等
hashcode相等,equals不一定相等
自然排序要求元素必须实现Compareable接口,并重写里面的compareTo()方法,
如果实现接口的方法不足以满足要求
比较器排需要在TreeSet初始化是时候传入一个实现Comparator接口的比较器对象,或者采用匿名内部类的方式new一个Comparator对象,重写里面的compare()方法
比如我们想要从大到小 这个时候实现接口是满足不了我们的需求的 就要采用第二种方法
双列集合 map接口
TreeMap
LinkedHashMap
HashMap 在底层是通过hashCode方法去确定key是否重复 跟value没有关系
类似与Set接口的三个实现类
hashCode作用 用来确定元素在集合中存放的索引
如果通过hashCode判断相同会再次通过equals去再次判断是否为同对象,如果是的话会覆盖;
在HashSet中 hashCode作用 就是集合中的值
在HashMap中他是Key
二叉查找树规律
左左右旋一次
左右 先左后右
右右左旋一次
右左 先右后左