用去除ArrayList中重复元素,思路是定义一个新的ArrayList来接收原来的ArrayList中的元素,如果新的元素没有该元素则添加,如果有了该元素就不添加,返回新的ArrayList.小弟定义了以下小程序,编译没问题,但是不能运行。不知哪里出错。
[import java.util.*;
class ArrayListTest2
{
public static void main(String[] args)
{
ArrayList a=new ArrayList();
a.add("java01");
a.add("java02");
a.add("java03");
a.add("java04");
a.add("java01");
System.out.println(haha(a));
}
public static ArrayList haha(ArrayList a)
{
ArrayList a1=new ArrayList();
Iterator t=a.iterator();
while (t.hasNext())
{
if (!a1.contains(t.next()))
{
a1.add(t.next());
}
}
return a1;
}
}][/code]

解决方案 »

  1.   


    if (!a1.contains(t.next()))
    {
    a1.add(t.next());
    }
    t.next()就已经把值取出来了,可以改成:
    while (t.hasNext())
    {
    String str = (String) t.next();
    if (!a1.contains(str))
    {
    a1.add(str);
    }
    }
      

  2.   

    每次调.next(),都移动了一次游标。
    也就是你用来判断的数,和你添加的不是同一个数了。
      

  3.   

    t.next()是取出当前迭代器指向元素
    如果再调用就会取得下一个元素
    如果下一个元素为空就会报错帮你改了下,一堆警告
    import java.util.ArrayList;
    import java.util.Iterator;class Test {
    public static void main(String[] args) {
    ArrayList<String> a = new ArrayList<String>();
    a.add("java01");
    a.add("java02");
    a.add("java03");
    a.add("java04");
    a.add("java01");
    System.out.println(haha(a));
    } public static ArrayList<String> haha(ArrayList<String> a) {
    ArrayList<String> a1 = new ArrayList<String>();
    Iterator<String> t = a.iterator();
    while (t.hasNext()) {
    String v = t.next();
    if (!a1.contains(v)) {
    a1.add(v);
    }
    }
    return a1;
    }
    }
      

  4.   

    去重,遍历ArrayList把里面的元素放到一个Set里,就直接去重了。