Collection :
Collection接口是集合层次结构中的根接口。 集合表示一组对象,称为其元素 。
List子接口下的实现类有序可重复
Set子接口下的实现类无序不可重
Collection接口中的方法:
添加 add
删除 remove
记数 size
包含 contains
清空 clear
是否空 isEmpty
关于迭代器(Iterator):
所有实现了Collection接口的容器类都有一个 iterator 方法用以返回一个实现了Iterator接口的对象。
Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。
Iterator接口定义了如下方法:
boolean hasNext(); //判断是否有元素没有被遍历
Object next(); //返回游标当前位置的元素并将游标移动到下一个位置
void remove(); //删除游标左面的元素,在执行完next之后该 ,操作只能执行一次
一、List
extends Collection
有序的可重复
新增方法 :
新增了一些根据索引进行操作的方法
获取 get
查询对象出现的索引 indexOf(Object)
底层用双向链表实现的List。特点:查询效率低,增删效率高,线程不安全。
底层用数组实现的List。特点:查询效率高,增删效率低,线程不安全。
遍历方式 :
普通for
//普通for循环 ,利用List元素有下标的特点,依次获取每一个元素
for (int i=0; i<list.size(); i++){
System.out.println(list.get(i));
}
增强for
//增强for 依次获取集合中每一个元素存入一个临时变量中
for (String temp : list) {
System.out.println(temp);
}
Iterator迭代器
Iterator<String> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
ListIterator列表迭代器
1、ArrayList:
有序,可重复,可以根据索引进行操作
List接口的可调整大小的阵列实现。 实现所有可选列表操作,并允许所有元素,包括null 。
这个类大致相当于Vector ,除了它是不同步的。
底层结构 : 可变数组 Object[] elementData;
特点 : 根据索引查询效率高,做增删效率低,因为大量的涉及到新数组创建,数据的拷贝
引用场景 : 适合应用在大量做查询,少量做增删的场景
初始容量 : 10 DEFAULT_CAPACITY = 10
扩容机制 : 通过Arrays.copyOf方法实现创建新数组拷贝数据,每次扩容原容量的1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1);
新增方法 : 无
遍历方式 :
1.for
2.foreach
3.Iterator
4.ListIterator
注意 :
如果某个类型底层构为数组或数组相关类型,需要关注初始容量与扩容机制
2、Vector:
ArrayList与Vector区别 :
共同点 :
都是List接口的实现类,有序可重复的
底层结构都是数组,查询效率高,增删效率低
不同点 :
线程安全|同步问题 :
ArrayList线程不安全|不同步
Vector 线程安全|同步
如果不需要线程安全实现,建议使用ArrayList代替Vector 。
初始容量与扩容机制 :
ArrayList 初始容量默认10|可以在构造器中指定,在add方法中创建
Vector 初始容量默认10|可以在构造器中指定,在构造器中直接创建
ArrayList 每次扩容原容量的1.5倍
int newCapacity = oldCapacity + (oldCapacity>>1);
Vector 默认每次扩容原容量的2倍|可以根据需求指定每次扩容多少-->容量增量
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
3、LinkedList
有序的,可重复的
实现所有可选列表操作,并允许所有元素(包括null )。
底层结构 : 双向链表
特点 : 查询效率低,增删效率高
应用场景: 适合应用在大量做增删,少量做查询的情况
新增方法 : 新增了一些操作链表头尾的方法
遍历方式 : 1)for 2)foreach 3)iterator 4)listIterator
二、Set
extends Collection
无序的,不可重复(去重的)
无序 : 存放的顺序与内部真实存储的顺序不保证一致
新增方法 : static <E> Set<E> of(E... elements) 返回包含任意数量元素的不可修改集。
遍历方式 :
普通for不可用,set集合无序,对于索引不可用
//增强for
for(String s : set){
System.out.println(s);
}
//迭代器
Iterator<String> it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
TreeSet
底层是由TreeMap维护的
无序的,不可重的
底层结构 : 红黑树(平衡二叉树)
特点 : 查询效率高,去重,默认升序排序
引用场景 : 适合应用在存储多个单个值的数据的集合,去重的,自动升序排序的场景
新增方法 : 新增了一些与比较大小相关的方法
遍历方式 : 1)foreach 2)iterator