List接口
List的两个实现类----------------------ArrayList和LinkedList
List的特点 有序 有索引 可存储重复元素
List接口的特有方法 (带索引的方法)
add(int index,E) 将元素插入到指定索引
remov(int index) 删除指定索引元素,返回删除的元素
set(int index, E) 修改指定索引元素,返回被修改前的元素
数据的存储结构 栈:先进后出 队列:先进先出 数组:查找快,增删慢 链表:增删快,查找慢
ArrayList 本质是可变数组 线程不安全(不同步,运行速度快)
添加之前,进行扩充判断,默认长度为10
LinkedList 本质是单向链表 线程不安全(不同步,运行速度快)
addFirst(E) 添加到链表的开头 setFirst(E) removeFirst(E)
addLast(E) 添加到链表的结尾 setLast(E) removeLast(E)
Set接口
Set接口的实现类 HashSet
Set接口的特点: 无序 无索引 不可存储重复元素
HashSet 底层是Map (哈希表) 线程不安全,(不同步,运行速度快)
哈希表的数据结构(数组链表的结合)
数组的默认长度是16,加载因子(长度的百分比–》长度0.75)是0.75 当达到 长度0.75 进行扩容(又叫数据的再哈希)影响性能, 长度和加载因子可更改,不建议更改
对象的哈希值 hashCode() 本质就是一个整数
哈希表的存储原理 比较对象的哈希值,对象equals() 集合在容器内找相同的哈希值,没有就直接存到数组中,有的话,用要存的对象调用equals(),结果为true时,集合判定元素重复,不保存;结果为false,集合判定元素没有重复,添加到链表中
LinkedHashSet 继承自HashSet 有序的set集合 线程不安全,(不同步,运行速度快)
判断集合元素唯一的原理 ArrayList的contains方法(本质是equals方法) HashSet的add和contains方法(本质是判断hashCode和equals方法)
8种基本类型和String都重写了hashCode和equals 为了保证哈希表存储的唯一