該問題有兩種方法:
一
利用兩個數組,此法簡單,不討論
二
利用一個數組,從第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]
正確。