1.List接口Collection接口的一个子接口,List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引
2.List接口实现类有ArrayList、LinkedList、Vector
(1)ArrayList
-
ArrayList是List接口的主要实现类;
-
ArrayList的底层数据结构是动态数组,查询效率高,增删慢
-
ArrayList是线程不安全的,而Vector是线程安全的,即使为保证List集合线程安全,也不推荐使用Vector;
-
元素可以为null;
(2)LinkedList
-
底层数据结构是链表,查询慢,增删快
-
线程不安全,效率高
-
对于频繁的插入或删除元素的操作,建议使用LinkedList,效率较高;
(3)Vector
- Vector 是一个古老的集合,JDK1.0就有了。大多数操作与ArrayList相同,区别之处在于Vector是线程安全的。
- 在各种list中,最好把ArrayList作为缺省选择。
- 当插入、删除频繁时,使用LinkedList;Vector总是比ArrayList慢,所以尽量避免使用
- Vector类的所有方法均是同步的,可以由两个线程安全地访问一个Vector对象,但是一个线程访问Vector的话代码要在同步操作的基础上耗费大量的时间,在不需要保证线程安全的时候建议使用ArrayList。
- Vector是线程同步的,所以访问效率要比ArrayList慢
- 底层数据结构是数组、查询快、增删慢
3.List集合的常用方法
(1)void add(int index, Object ele) :向列表的指定索引处插入元素,指定索引及之后的元素后移
(2)void add(Object ele):向列表的尾部添加指定的元素
(3)boolean addAll(int index, Collection eles): 将指定collection中的所有元素都插入到列表中的指定位置
(4)boolean contains(Object o):如果列表中包含指定元素则返回true
(5)boolean containsAll(Collection c):如果列表中包含指定Collection的所有元素,则返回true
(6)Object get(int index):返回列表中指定位置的元素
(7)int indexOf(Object obj) :返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1
(8)int lastIndexOf(Object obj) :返回此列表中最后出现指定元素的索引,如果不存在此元素返回-1
(9)Object remove(int index) :删除指定索引位置的元素
(10)Object set(int index, Object ele) :将集合中指定位置的元素用指定元素替换
(11)List subList(int fromIndex, int toIndex):返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图
4.List集合的遍历
List集合的遍历有三种方法,分别为增强for循环,利用Iterator、传统的for循环
(1)增强for循环
@Test
public void test2() {
List l1 = new ArrayList();
l1.add(123);
l1.add("AA");
l1.add(new String("狼来了"));
//增强for循环
for(Object l:l1) {
System.out.print(l+"\t");
}
}
(2)利用Iterator
List l1 = new ArrayList();
l1.add(123);
l1.add("AA");
l1.add(new String("狼来了"));
//Iterator迭代
Iterator iter = l1.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
123
AA
狼来了
(3)传统for循环
@Test
public void test3() {
List l1 = new ArrayList();
l1.add(123);
l1.add("AA");
l1.add(new String("狼来了"));
//一般for循环
for(int i= 0;i<l1.size();i++) {
System.out.print(l1.get(i)+"\t");
}
}
5.注意事项:
添加进List集合中的元素(对象)所在的类一定要重写equals()方法