(63)ListIterator用法、List均有的增删改查

Collection
——List;元素有序,元素可以重复。因为该集合体系有索引
——Set:元素是无序的,元素不可以重复
List:
特有方法:凡是可以操作角标的方法都是该体系特有的方法。
带角标
增:add(index,element);
addAll(index,Collection)
删:remove(index)
改:set(index,element)
查:get(index)
subList(from,to);
listIterator();

    ArrayList al=new ArrayList();
        //添加元素
        al.add("java01");
        al.add("java02");
        al.add("java03");

        //按照位置插入元素
        al.add(1, "java04");//1423


        //增加一个集合
        ArrayList al2=new ArrayList();
        //添加元素
        al2.add("java04");
        al2.add("java05");
        al.addAll(2, al2);//144523

        //按照索引删除一个元素
        al.remove(3);////14423

        //在特定位置修改元素
        al.set(1, "java05");//15423

        //通过角标获取元素
        sop("get(3)="+al.get(3));//java02

        //通过元素,判断位置
        al.indexOf("java04");//下标是2

        //获取所有元素
        for(int x=0;x<al.size();x++) {
            sop("al("+x+")="+al.get(x));
        }

        //获取子集合(不包含尾)
        List a2= al.subList(2, 4);
        sop("sub="+a2);//42

List集合特有的迭代器。ListIterator是Interator的子接口。
在迭代时,不可以用集合对象的操作集合中的元素。
因为会发生java.util.ConcurrentModificationException异常。
所以,在迭代器中,只能用迭代器的方法操作元素,可以Iterator方法是有限 的,只能对元素进行判断、取出、删除的操作。
如果想要其他的操作,修改等,就需要使用其子接口:ListIterator
该接口只能通过ListIterator方法获取。

通过Iterator迭代器操作集合

 ArrayList al=new ArrayList();
            //添加元素
            al.add("java01");
            al.add("java02");
            al.add("java03");
            //在迭代过程中,准备添加或者删除元素
            Iterator it=al.iterator();
            while(it.hasNext()){
                Object obj=it.next();
                if(obj.equals("java02")) 
                    //al.add("java008");
                     it.remove();
                sop("obj="+obj);//obj仍可以输出Java02的原因:虽然没有集合里没有这个引用,但是在没移除之前,obj指向了Java02
            //通过Iterator迭代器,已经确定的元素的个数,不能通过集合的方式增删,若增删,则发生异常java.util.ConcurrentModificationException
            //当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。 
            //在迭代器中有remove()方法,可用迭代器的方法进行操作,将集合中对Java02对象的引用去除,即不在集合中了。
            //在Iterator迭代器中只能判断(hasNext)、获取(next)、移除(remove)
    }
            sop(al);

}

通过ListIterator迭代器操作集合
hasNext

 ArrayList al=new ArrayList();
            //添加元素
            al.add("java01");
            al.add("java02");
            al.add("java03");
            ListIterator li=al.listIterator();
            while(li.hasNext()) {
                Object obj=li.next();
                if(obj.equals("java02"))
                  ①li.add("java04");//该元素直接插入到 next 返回的下一个元素的前面(如果有),或者 previous 返回的下一个元素之后(如果有);
                                   //插入到下一个的前面,即当前元素的后面
                sop(obj);

            }
            sop(al);//[java01, java0000, java03]
}
② li.set("java00");在当前元素处修改  al=[java01, java0000, java03]

hasPrevious

sop("hasNext():"+li.hasNext());//true
            sop("hasPrevious():"+li.hasPrevious());//false
            while(li.hasNext()) {
                Object obj=li.next();
                if(obj.equals("java02"))
                   //li.add("java04");//该元素直接插入到 next 返回的下一个元素的前面(如果有),或者 previous 返回的下一个元素之后(如果有);
                   li.set("java0000");                //插入到下一个的前面,即当前元素的后面
                sop(obj);
            }
            sop("hasNext():"+li.hasNext());//false
            sop("hasPrevious():"+li.hasPrevious());//true
            sop("---------------------");

            while(li.hasPrevious()) {
                Object obj=li.previous();
                if(obj.equals("java0000"))
                   ①li.add("java04");//previous 返回的下一个元素之后(如果有);[java01, java04, java0000, java03]
                   li.set("java0q"); //[java01, java0q, java03]               
                sop(obj);
            }
②li.set("java0q"); //[java01, java0q, java03]
posted @ 2017-07-15 19:52  测试开发分享站  阅读(268)  评论(0编辑  收藏  举报