Java中ArrayList问题:删除一个ArrayList中的重复元素,注意留意一个问题


该问题有两种方法:

  一

  利用两个数组,此法简单,不讨论

  二

  利用一个数组,从第0个开始依次取元素,并在其后元素中查找是否有该元素,有则删掉后面的重复元素,依次遍历。---但是这种情况要特别注意,当后续元素中有连续的重复元素时,如不加上y--使y(待比较的后续元素)回退一个,很可能会因为我们删掉当前重复元素y后其后的连续重复元素顶上,导致忽略掉顶上的重复元素。

代码如下: 

  

 1 public static void main(String[] args) {
 2         ArrayList array=new ArrayList();
 3         array.add("hello");
 4         array.add("world");
 5         array.add("java");
 6         array.add("hello");
 7         array.add("java");
 8         array.add("world");
 9         array.add("world");
10         array.add("world");
11         array.add("java");
12         System.out.println("array:"+array);
13         for(int i=0;i<array.size();i++){
14             for(int j=i+1;j<array.size();j++){
15                 if(array.get(i)==array.get(j)){
16                     array.remove(j);
17                 }
18             }
19         }
20         System.out.println("array:"+array);
21     }

  结果为: 

array:[hello, world, java, hello, java, world, world, world, java]
array:[hello, world, java, world]

漏掉了一个world,因在删除连续的几个world时,删除第一个重复的world后后一个顶上了,在删除元素后,我们没有回退一下判断刚刚顶上的元素。
改进:

public static void main(String[] args) {
        ArrayList array=new ArrayList();
        array.add("hello");
        array.add("world");
        array.add("java");
        array.add("hello");
        array.add("java");
        array.add("world");
        array.add("world");
        array.add("world");
        array.add("java");
        System.out.println("array:"+array);
        for(int i=0;i<array.size();i++){
            for(int j=i+1;j<array.size();j++){
                if(array.get(i)==array.get(j)){
                    array.remove(j);
                    j--;
                }
            }
        }
        System.out.println("array:"+array);
    }

结果为

array:[hello, world, java, hello, java, world, world, world, java]
array:[hello, world, java]

正确。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM