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

------- 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);
    }
}

 运行结果如下:

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中依次说到。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值