您的位置:首页 > 其它

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

2017-07-15 19:51 295 查看
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
//通过It
be77
erator迭代器,已经确定的元素的个数,不能通过集合的方式增删,若增删,则发生异常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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: