1.ArrayList类
method
boolean add(E e);
void clear();
boolean isEmpty();
boolean remove(Object o);
public e[] toArray();
2.Collection接口中带All的方法
boolean addAll(collection c2); //添加c2中的的元素
boolean removeAll(collection c2); //删除两个集合的交集
boolean containsAll(collectioin c2);//判断调用的集合是否包含传入的集合
boolean retainAll(collection c2); //取交集,如果调用的集合改变,返回true,不变则false
3.Iterator接口
获取Iterator
Iterator i = c.iterator();
method
boolean hasNext(); //判断集合中是否有元素
E next(); //获取下一个元素
viod remove(); //删除当前元素
原理
4.List接口
特有的方法
void add(int index, E element);//在索引上添加元素
E remove(int index);//根据索引删除元素
E get(int index); //根据索引获取元素
E set(int index,E element);//修改指定索引的元素
5.ConcurrentModificationException并发修改异常
迭代器在遍历元素的同时,集合修改元素会产生
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("world");
list.add("d");
list.add("e");
Iterator<String> it = list.iterator(); //获取迭代器
while (it.hasNext()) { //判断集合中是否有元素
String str = (String)it.next();
if ("world".equals(str)) {
list.add("javaee"); //遍历的同时在增加元素,并发修改
}
}
//产生ConcurrentModificationException
修改方法
List接口中的listIterator()方法
ListIterator<String> lit = list.listIterator();//获取迭代器,List集合特有
while (lit.hasNext()) {
String str = (String)lit.next();
if ("world".equals(str)) {
lit.add("javaee"); //遍历的同时在增加元素,并发修改
}
}
6.ListIterator接口
获取迭代器
List Iterator<E> lit = list.listIterator();
方法
ListIterator<String> lit = list.listIterator();
while(lit.hasNext()) {
System.out.println(lit.next()); //获取元素并将指针向前移动
}
System.out.println("---------------");
while (lit.hasPrevious()) {
String string = (String) lit.previous();
System.out.println(string);
}
7.Vector类
实例化
Vector<E> v = new Vector<E>();
method
boolean addElement(E e);
Enumeriation elements();
e.g.
Vector<String> v = new Vector<String>();
v.addElement("hello"); //添加元素
Enumeration en = v.elements(); //获取枚举
while (en.hasMoreElements()) { //判断枚举中是否有元素
System.out.println(en.nextElement()); //获取集合中的元素
}
8.集合框架
(1)ArrayList
ArrayList底层由数组实现,长度为10,当数组满后自动创建一个新数组并增长百分之五十。
**特点:**查询很快(通过索引直接找值),根据size来判断是否越界。增删很慢(增删处后的所有的元素都要移动)。
线程不安全,效率高。
(2)LinkedList
LinkedList底层用链表实现。
**特点:**查询很慢。增删很快。线程安全,效率低。
**查询方法源代码:**通过索引与size的一半比较,决定从前往后还是从后往前查询。
(3)Vector
**特点:**查询相对ArrayList慢。增删很慢(增删处后的所有的元素都要移动)。
线程安全,效率低。
对比
ArrayList和Vector:
- ArrayList线程不安全,Vector线程安全。LinkedList更快
- 二者都是数组实现的
LinkedList和ArrayList: - LinkedList链表实现,增删快,查询修改慢。ArrayList数组实现,增删慢,查询修改快。
- 都是线程不安全的。
使用
增删比较多 LinkedList
查询修改比较多 Arraylist
都比较多 arrayList