1.List集合共性方法
首先,我们来了解下Collection的两大分支:
Collection
|--List:元素是有序的,元素可以重复,因为该集合体系有索引。
|--Set:元素师无序的,元素不可以重复,该集合无索引。
|--List:元素是有序的,元素可以重复,因为该集合体系有索引。
|--Set:元素师无序的,元素不可以重复,该集合无索引。
这篇文章主要说List集合。
List特有方法:
增:add(index,element);
addAll(index,Collection);
删:remove(index);
改:set(index,element);
查:get(index);
subList(from,to);
listIterator();
以下是示例代码:
public class ListDemo {
public static void main(String[] args) {
ArrayList alList = new ArrayList();
alList.add("java01");
alList.add("java02");
alList.add("java03");
alList.add("java04");
sop("原数组:"+alList);
//移除角标号为2的元素
//alList.remove(2);
//将角标号为2的元素修改
alList.set(2, "Java003");
//获取角标号为1的元素
sop("角标号为1的元素为:"+alList.get(1));
//获取角标号从1到3的元素(前闭后开区间)
sop("角标号从1到3的元素为:"+alList.subList(1, 3));
sop("新数组:"+alList);
/*for(Iterator it = alList.listIterator();it.hasNext();){
sop("Iterator遍历--"+it.next());
}*/
}
public static void sop(Object obj){
System.out.println(obj);
}
}
运行结果如下:
2.ListIterator方法
List集合特有的迭代器,ListIterator是Iterator的子接口
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代时,只能用迭代器的方法操作元素,可是Iterator方法是有限的,只能对元素进行判断,取出,修改等。
就需要使用其子接口:ListIterator。该接口只能通过List集合的listIterator方法获取。
ConcurrentModificationException异常:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
意思就是当我们要操作要提取的元素时,会导致JVN不知所云,无法进行下一步的执行,就会抛出ConcurrentModificationException异常。
以下是ListIterator的示例代码:
ArrayList alList = new ArrayList();
alList.add("java01");
alList.add("java02");
alList.add("java03");
alList.add("java04");
for(ListIterator it = alList.listIterator();it.hasNext();){
Object object = it.next();
if(object.equals("java03")){
//it.add("Java005");
it.set("Java003");
}
sop(object);
}
sop(alList);
运行结果为:
listIterator也可以进行反向遍历,以下是正反向遍历代码:
ListIterator it = alList.listIterator();
for(;it.hasNext();){
Object object = it.next();
if(object.equals("java03")){
//it.add("Java005");
it.set("Java003");
}
sop("Next="+object);
}
for(;it.hasPrevious();){
sop("Previous=="+it.previous());
}
sop(alList);
运行结果如下:
3.List集合具体对象的特点
在最后,我们来认识一下List的子类:
ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快,但是增删速度稍慢,线程不同步。
LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询速度稍慢。
Vector:底层是叔组数据结构。线程同步,被ArrayList替代了。
我会在接下来的几篇Blog中依次说到。