1. List集合概述
List集合代表一个元素有序可重复的的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置上的集合元素。List集合默认按元素的添加顺序设置元素的索引,例如第一次添加的元素索引为0,第二次添加的元素索引为1·····
1.1 List集合特有方法
a. void add(int index,Object element):将元素element插入到List集合的index处
b. Object remove(int index):删除并返回index处的元素
c. Object get(int index):返回集合index索引处的元素
d. Object set(int index,E element):将index索引处的元素替换成element对象,返回被替换的旧元素
List集合特有遍历功能:size()和 get()方法结合使用
示例:
package com.xupt.List;
import java.util.ArrayList;
import java.util.List;
import com.xupt.student.Student;
/*
* 使用size()和get()方法遍历List集合
*/
publicclass ListTest01 {
publicstaticvoid main(String[] args) {
List<Student> list=new ArrayList<Student>();
list.add(new Student("胡歌",33));
list.add(new Student("霍建华",32));
list.add(new Student("刘诗诗",31));
list.add(new Student("杨幂",30));
for(int i=0;i<list.size();i++){
System.out.println(((Student)list.get(i)).getName()+"——"+((Student)list.get(i)).getAge());
}
}
}
1.2 ListIterator接口
与Set只提供了一个iterator()方法不同的是,List还额外提供了一个ListIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法。ListIterator接口在Iterator接口基础上增加了如下方法:
a. booleanhasNext():是否有下一个元素
b. booleanhasPrevious():是否有前一个元素
c. Object next():返回下一个元素
d. Objectprevious():返回上一个元素
e. void add(Objecto):在指定位置插入一个元素
1.3并发修改异常
在迭代过程中,使用了集合的方法对元素进行操作。导致迭代器并不知道集合中的变化,容易引发数据的不确定性。
并发修改异常解决办法:在迭代时,不要使用集合的方法操作元素。通过ListIterator迭代器操作元素。ListIterator的出现,解决了使用Iterator迭代过程中可能会发生的错误情况。
示例:
输出结果:
解决方案:
2.Vector集合
Vector集合数据存储的结构是数组结构,为JDK中最早提供的集合。Vector中提供了一个独特的取出方式,就是枚举Enumeration,它其实就是早期的迭代器。此接口Enumeration的功能与 Iterator 接口的功能是类似的。Vector集合已被ArrayList替代。枚举Enumeration已被迭代器Iterator替代。
2.1 Vector常见的方法
2.2 Enumeration枚举常见的方法
2.3 Vector集合遍历
3. ArrayList集合
ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。
4. LinkedList集合
LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。如下图:
ArrayList:底层数据结构是数组,查询快,增删慢
LinkedList:底层数据结构是链表,查询慢,增删快
5. 固定长度的List
数组工具类Arrays里提供了一个asList(Object… a)方法,该方法可以把一个数组或者指定个数的对象转换成一个List集合,这个List集合既不是ArrayList实现类的实例,也不是Vector实现类的实例,而是Arrays的内部类ArrayList的实例。Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合里的元素,不可增加、删除该集合里的元素,否则将会引发UnsupportedOperationException异常。