Collections:单列集合(接口)
遍历:1、普通for循环 2、创建迭代器 3、增强迭代器
方法:size()、remove()、removeif()、add()、isEmpty、contains()、clear()
List: (接口) 继承Collections接口
特点:有索引、元素可以重复
方法:增删改查 add、remove、set、get
ArrayList:List接口的实现类
底层实现:数组
特点:查找快(有索引)、增删慢(长度固定,增加元素需要扩容,然后重新将旧的数组赋值给新的数组)
LinkedList:list接口的实现类
底层实现:链表
特点:查找慢(需要一个一个的查找元素)、增加快(通过改变节点里面的地址值)
特有的方法:getf、getl、setf、setl、removef、removel
set:继承Collections接口
特点:没有索引、元素也不能重复
遍历:1、创建迭代器对象 2、增强for循环
方法:继承父类方法
TreeSet:set接口的实现类
底层实现:红黑树
特点:可以排序----需要写排序compare方法
HashSet:set接口的实现类
底层实现:哈希表(数组+链表+红黑树)
哈希值:
如果没有重写Object类的hashCode方法 使用的是本地地址值的比较
重写了Object的方法的话 先根据hash值和数组的长度找到对于的索引位置,然后判断该位置有没有元素
有:equals方法比较两个元素的属性值是否相同 相同就丢弃 不相同就用链表结构存贮
没有:存入
jdk7和jdk8的区别在于:jdk8加了红黑树 当同一个hash值位置的元素超过了8个,就用红黑树存储。
Map双列集合
方法:clear、put(K key,V value)、isEpmty、size、remove(K key)、get(key)、containsKey()、containValue()
遍历:
1、得到键的集合 遍历得到键对应的值
方法:keySet()
2、得到键值对的集合 遍历得到键和键值
方法:entrySet()
HashMap
底层实现:和Hashset一样 哈希表
哈希值:
比较的是键的哈希值 跟值无关
如果没有重写 还是一样比较本地地址值
如果重写了:如果两个元素的键的哈希值相同 则用equals方法比较方法中需要比较的属性值 如果属性值全部相同 则丢弃后面加入的,如果不同,链表结构存储 同一个位置的元素超过八个就使用红黑树
TreeMap
底层实现:红黑树
可以排序—如果没有写compare方法—报错
重写了-----可以根据重写的内容排序,如果重写方法的返回值为0,则覆盖原先的键的值。