- 用集合的方法操作
- 用迭代器的方法操作
同时操作集合元素的并发问题
在迭代过程中,同时使用集合的方法和迭代器的方法操作集合元素的并发问题
//【1】在创建迭代器对象时已经确定了该集合容器的数量
Iterator it=ar.iterator();
while(it.hasNext()){
//【2】迭代器取出元素的同时又使用集合的方法添加数据导致并发修改异常
//【3】不能同时使用集合的方法和迭代器方法来同时操作同一组元素,
Object obj=it.next();
if(obj.equals("ff")){
//【4】在迭代过程使用集合的添加方法导致并发修改异常ar.add(4);
//【5】 it.remove();可以使用迭代器的方法进行移除
System.out.println(ar);
}
}
迭代器Iterator 的局限性
【1】在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生并发修改异常
【2】所以在迭代过程中,只能用迭代器的方法操作集合元素。
【3】可是迭代器Iterator操作集合元素的方法有限:hasNext()、next()、remove(),只能对元素进行判断、取出、删除等操作
【4】如果想要其他的操作如添加、修改,就需要使用其子接口:ListIterator
【5】注意ListIterator接口只能通过List集合的ListIterator方法获取
迭代器ListIterator接口
ListIterator是Iterator 的子接口,因为List集合体系是通过操作角标的操作元素,所以ListIterator是List集合体系独有的迭代方法,可以增删查改。
//在创建List集合专属的迭代器ListIterator对象
ListIterator it=ar.listIterator();
while(it.hasNext()){
Object obj=it.next();
if(obj.equals("ff")){
//注意只能操作一次
//it.add("哈哈");
it.set("我爱");
System.out.println(ar);
}
}
ArrayList去重复元素
去重复思想:遍历集合每个元素,按顺序找到不相同的元素用空的集合装
public static void main(String[] args) {
ArrayList ar=new ArrayList();
ar=singleElement(ar);
System.out.println(ar);
}
public static ArrayList singleElement(ArrayList ar) {
//【1】定义一个空的临时容器
ArrayList newar=new ArrayList();
Iterator it =ar.iterator();
//【2】利用迭代器遍历集合每个元素与临时容器的元素比较
//【3】集合元素与临时容器的元素不相同的便添加到临时容器
while(it.hasNext()){
Object obj=it.next();
if(!newar.contains(obj)){
newar.add(obj);
}
}
return newar;
}