List、Set集合知识总结
一、List集合
List接口:继承自Collection接口。
特点:1、有序,存取顺序一致。
2、可存储重复元素。
3、有索引。
带索引的方法(特有):
add(int index,E element):在指定位置添加指定元素。
set(int index,E element):将指定元素替换到指定位置。
get(int index):获取指定位置的元素。
remove(int index):删除指定位置的元素。
二、ArrayList集合
特点:底层是数组,查询快(因为数组地址连续)、增删慢(因为每增加一个元素,底层都会调用数组的复制方法arrayCopy(),所以效率低),不同步(多线程)。
三、LinkedList集合
特点:1、底层是链表,查询慢、增删快。
2、包含大量操作首尾元素的方法。
方法:
1、添加元素
在集合开头添加元素:addFrist(E element)、push(E element)
在集合末尾添加元素:addLast(E element)、add(E element)
2、删除元素
删除集合中的第一个元素:removeFrist()、pop()
删除集合中的最后一个元素:removeLast()
3、获取元素
获取集合中的第一个元素:getFrist()
获取集合中的最后一个元素:getLast()
四、Vector集合
特点:底层是数组,同步(单线程,速度慢)。
五、Set集合
Set存储元素不重复的原理:Set在调用add()方法时,add()方法会调用元素的hashCode方法和equals方法,判断元素是否重复。
哈希值:一个由系统随机给出的十进制值,是对象的地址值,一个逻辑地址,不是实际存在的物理地址。
六、LinkedHashSet集合
有序的原因:因为底层是哈希表(数组+链表/红黑树)+链表,链表记录了元素的存储顺序。