日期:2014-05-20  浏览次数:20703 次

去除集合中重复的元素
package day18作业;

import java.util.ArrayList;
import java.util.Iterator;

/*
 * 去除ArrayList集合中的重复元素
 * 思路:
 *  可以定义两个容器,从一个容器中取出元素放到另一个容器中,如果另一个容器中有则把这个元素移除
 * */
public class Demo5 {

public static void main(String[] args) {
ArrayList arr1=new ArrayList();

arr1.add("wew");
arr1.add("wedsd");
arr1.add("wewd");
arr1.add("wewd");
arr1.add("eahrg");
arr1.add("wqrs");
method(arr1);
}

public static void method(ArrayList arr1) {
ArrayList arr2=new ArrayList();
//遍历arr1容器
for(Iterator it=arr1.iterator();it.hasNext();){
Object obj=it.next();
//如果arr2容器中不包含当前的arr1容器的元素
if(!(arr2.contains(obj))){
arr2.add(obj);
}
}
//清空arr1容器中的元素
arr1.clear();
//把arr2中的元素赋给arr1容器中
arr1.addAll(arr2);
System.out.println(arr1);
}

}


package day18作业;

import java.util.ArrayList;
import java.util.Iterator;

/*
 * 去除ArrayList集合中的重复元素
 * 思路:
 *  可以定义两个容器,从一个容器中取出元素放到另一个容器中,如果另一个容器中有则把这个元素移除
 * */
public class Demo5 {

public static void main(String[] args) {
ArrayList arr1=new ArrayList();

arr1.add("wew");
arr1.add("wedsd");
arr1.add("wewd");
arr1.add("wewd");
arr1.add("eahrg");
arr1.add("wqrs");
method(arr1);
}

public static void method(ArrayList arr1) {
ArrayList arr2=new ArrayList();
//遍历arr1容器
for(Iterator it=arr1.iterator();it.hasNext();){
//如果arr2容器中不包含当前的arr1容器的元素
if(!(arr2.contains(it.next()))){
arr2.add(it.next());
}
}
//清空arr1容器中的元素
arr1.clear();
//把arr2中的元素赋给arr1容器中
arr1.addAll(arr2);
System.out.println(arr1);
}

}


为什么这两段代码运行结果不一样呢???求解
------解决方案--------------------
第二个显然错了 it.Next()

        for(Iterator it=arr1.iterator();it.hasNext();){
            //如果arr2容器中不包含当前的arr1容器的元素
            if(!(arr2.contains(it.next()))){//如果现在指向第三个元素
                arr2.add(it.next());//那么此处加入的是第四个元素
            }
        }



------解决方案--------------------
比如你有3个鸡蛋,第一次it.next()取到的是第一个鸡蛋,第二次it.next()的时候取到的是第二个鸡蛋,后面的写法,加入的是第二个鸡蛋,怎么可能会是一样的呢?而且可能出错,如果只有一个鸡蛋,你第二次it.next()的时候,没有鸡蛋可以取了....
------解决方案--------------------
第一个只执行了一次it.next()
第二个执行了两次
当然不一样了