Collection (子类ArrayList)
1:List
a:ArrayList:底层数据结构是数组结构:不安全,高效,查询的速度快 (数组),底层判断元素是否相同依据的是元素的 equals方法
无论contains还是remove都会去使用equals判断元素是否相同,
所以在往ArrayList集合存储自定义元素时,最好建立该元素特有的判断对象是否相同的依据,也就是覆盖equals方法。
b:Vector:底层数据结构是数组结构 线程安全,
c:LinkedList:底层是链表结构。线程不安全的,同时对元素的增删操作效率很高 (链表)
可变长度的数组:
ArrayList内部封装了一个默认长度为10的数组
当超出长度是,集合内部会自动生成一个新的数组,将原数组中的元素 复制到新数组中,再将新元素添加到新数组,
新数组到底多长呢?
ArrayList: 50%延长
Vector 100%延长
2:Set
a: HashSet
底层数据结构是哈希表,
HashSet集合如何保证元素的唯一性呢?
HashSet集合保证元素唯一性,依赖的是元素的hashCode方法和equals方法
当元素的哈希值不同时,元素都有自己的独立位置,不需要再判断元素的equals方法,
当元素的哈希值相同时,这时元素在哈希表中位置相同,这时就需要再判断一次元素的内 容是否相同,就需要调用元素的equals方法进行一次比较,如果equals返回是true,那么 视为两个元素为重复元素,只存储一个,如果返回是false,那么这两个元素不是重复元 素,会存储在同一个哈希值上,(equals方法返回值为true,说明有相同元素,不存储)
b: TreeSet
1:List:(子类ArrayList)该容器的元素是有序的,(存储的顺序和取出的顺序一致)
该集合中的元素都有索引(角标)。该集合可以存储重复的元素,
List集合中常见的共性方法。
1.添加元素 add();
2.删除元素 remove();
3.修改元素 set();
4.获取元素 get(); indexOf("abc"); subList(2,5);//根据头尾角标获取子列表
如果迭代器Iterator和集合同时对元素进行操作,会出现异常,所以只能用一种,且 Iterator,方法较少
但是List有ListIterator,可以操作元素,
所以List 在迭代过程中,如果需要增删改查元素 的操作,需要列表迭代器。
但是注意:该迭代器,只能用于List集合,
Linkedlist:addFirst();
2:Set 无序, 不可以重复,set接口的方法和collection中的方法一致
set接口取出元素的方法只有迭代器。