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