黑马程序员:Java基础——List集合共性方法,Iterator迭代和集合具体对象的特点

时间:2022-09-03 15:03:26
------- Java EE培训java培训、期待与您交流! ----------

1.List集合共性方法

    首先,我们来了解下Collection的两大分支:     Collection
        |--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);
}
}

 运行结果如下:

黑马程序员:Java基础——List集合共性方法,Iterator迭代和集合具体对象的特点

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);
运行结果为:

黑马程序员:Java基础——List集合共性方法,Iterator迭代和集合具体对象的特点

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);
运行结果如下:

黑马程序员:Java基础——List集合共性方法,Iterator迭代和集合具体对象的特点

3.List集合具体对象的特点

在最后,我们来认识一下List的子类:

ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快,但是增删速度稍慢,线程不同步。
LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询速度稍慢。
Vector:底层是叔组数据结构。线程同步,被ArrayList替代了。

我会在接下来的几篇Blog中依次说到。