1. LinkedList
基本使用
介绍
LinkedList : 底层是一个双向链表,因为不是连续存储
只是能够找到下一个元素的地址而已,所以进行添加和删除操作效率高
但是查询效率低,因为只能从第一个挨个找
使用
1.1 底层实现
LinkedList : 底层是一个双向链表,链表由节点构成,因为是双向链表,所以节点中有三个属性
1 保存的数据 Object
2 下一个节点对象 节点类型
3 上一个节点对象 节点类型
1.1.2 获取
get 方法
模拟下标获取的方式,本质上就是遍历操作
2. set
Set特性 无序且不可重复,无序指的是添加顺序和取出顺序不保证一致
分类 :
HashSet : 底层是散列表
TreeSet : 底层是红黑树,添加的元素必须按照一定的格式进行排序
(数字 : 默认从小到大, 字符串 : 按每位ASCII码进行排序, 日期 : 自然日期,昨天今天明天)
注意 :
使用TreeSet的时候,元素必须实现了Comparable接口,因为在添加的时候,会自动调用该接口的compareTo方法进行比较
添加字符串,数字,日期的时候,会进行自动排序,是因为Integer,String,Date都实现了该接口和该方法
如果我们要存储自定类型的时候,就需要让该类去实现对应的接口和方法才能进行存储
2.1 TreeSet
3. 排序
使用TreeSet的时候,元素必须实现了Comparable接口,因为在添加的时候,会自动调用该接口的compareTo方法进行比较
添加字符串,数字,日期的时候,会进行自动排序,是因为Integer,String,Date都实现了该接口和该方法
如果我们要存储自定类型的时候,就需要让该类去实现对应的接口和方法才能进行存储
3.1 compareble 和 comparator
Comparator 也是比较器类 Comparable 也是做比较的 , 如果这两个同时存在,则Comparator优先级高
使用情况 :
Comparable : 如果treeSet中保存我们自己定义的类型的时候,使用Comparable
Comparator : 如果treeSet中保存的不是我们写的类型的时候,就要使用Comparator来指定排序规则
比如 Integer 默认是升序排序,假如我们需要降序排序,我们只能使用 Comparator,因为我们不可能去更改Integer的源码
但此时 Integer中是有Comparable接口的实现的,等于两个比较都存在,但是Comparator优先级高
所以会按照我们定义的规则进行排序
3.2 List 排序