1.什么是集合?用来存储一堆数据的容器,不需要考虑容量问题,会自动扩容
2. Collection:集合的父类型,是一个接口。
其中有两个子接口:
List:有序可重复
Set:无序不可重复
重复不重复是指元素之间使用equals比较的
1:父接口Collection
常用方法:
boolean add(Object e):增加元素
boolean remove(Object obj)
boolean addAll(Collection c):两个集合合并
boolean removeAll(Collection c):移除交集
boolean retainAll(Collection c):保留交集
void clear():清空集合
boolean isEmpty():判断此集合是否含元素
int size():返回这个集合中元素的数量。
Object[] toArray():返回一个包含此集合中所有元素的数组
boolean contains(Object o):如果该集合包含指定的元素,则返回true。更正式地说,当且仅当此集合时返回true ,至少包含一个元素
Iterator<E> iterator():一个迭代器遍历这个集合中的元素
2:List子接口----线性表
boolean add(E e):将指定的元素追加到列表的末尾
void add(int index, E element):将数据插入到指定索引的地方
E set(int index, E element):将列表中指定位置的元素替换为 *指定元素(可选操作):此方法不会改变集合的长度
public E remove(int index)
public E get(int index):获取元素
public int lastIndexOf(Object o):
public int indexOf(Object o)返回元素的下标,返回-1说明没有此元素
List<E> subList(int fromIndex, int toIndex):列出从fromIndex所索引到toIndex索引的数据
public boolean contains(Object o):判断是否包含元素o
常用的实现类:
ArrayList:
private static final int DEFAULT_CAPACITY = 10;数组默认初始长度
是线性结构内部封装的是动态的数组。长度的增加和减少已经被封装。可以理解为自动的。
LinkedList:
是双向循环链表结构。一个元素里存了前一个元素的地址和后一个元素的地址。连到一起很像一链条。
ArrayList和LinkedList的区别: ArrayList: 查找快(有序的),增删慢 (数组)
LinkedList:增加删除快(链表),查找慢 (无序的)
ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别
ArrayList和 Vector都采用线性连续存储空间 ,他们之间的区别: ArrayList 线程不安全,效率高
Vector: 线程安全,效率低。
1) Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。
由数组转换成的集合不能进行增删操作。否则会出现异常,想进行增删改查,就在定义一个集合