我正在研究一种方法,以递归方式删除ArrayList中元素的重复项。但是我遇到了一个问题,我的方法有效并删除了一些元素,但不是所有重复项。
这是我的输入:
100, 200, 200, 300, 400, 300, 100, 500, 500, 400, 100, 400, 100, 100
这是输出:
100, 200, 300, 400, 100, 500, 100
而我的方法:
public static void removeDuplicates(ArrayList<Integer> list, int counter){ if(list == null){ throw new NullPointerException(); } if(counter < list.size()){ if(list.contains(list.get(counter))){ list.remove(list.lastIndexOf(list.get(counter))); } removeDuplicates(list, ++counter); } }
我知道我只是删除了所述值的最后一个元素,然后迭代到下一个元素。我想知道如何更改此设置以删除所有重复的元素。另外,我的输出的一部分使我感到困惑,其中有三个值“ 400”,但输出中只显示一个。
谢谢您的帮助。
试试这个:
public static void removeDuplicates(ArrayList<Integer> list, int counter){ if(list == null){ throw new NullPointerException(); } if(counter < list.size()){ if(list.contains(list.get(counter))){ if(list.lastIndexOf(list.get(counter))!=counter) { list.remove(list.lastIndexOf(list.get(counter))); counter--; } } removeDuplicates(list, ++counter); } }