値が{"16"、 "b"、 "c"、 "d"、 "e"、 "16"、 " 「f」、「g」、「16」、「b」} この16とbが繰り返されるので、私はそれらのすべてのエントリを削除したいと思います。私はc、d、e、f、gとして出力が必要です。以下のプログラムは正常に動作します。より良い解決策はありますか?要素の出現をすべて削除する方法
public class Test {
public static void main(String[] args) {
ArrayList <String> l = new ArrayList <String>();
String[] str = {
"16",
"b",
"c",
"d",
"e",
"16",
"f",
"g",
"16",
"b"
};
for (String s: str) {
l.add(s);
}
List ll = removeDups(l);
l.removeAll(ll);
System.out.println("Final List " + l);
}
private static List <String> removeDups(ArrayList <String> l) {
List <String> ll = new ArrayList <String>();
for (String a: l) {
int x = Collections.frequency(l, a);
if (x > 1) {
ll.add(a);
}
}
return ll;
}
}
Stackoverflowで質問を投稿する前に、コードをよく説明するかコメントしてください。誰にでも役立ちます。 –
それは、実際に何も削除しないので、 'removeDups'メソッドは実際には' findDups'と呼ばれるべきです。複製されたアイテムを見つけ出すだけです。 'l.removeAll(ll)'行が 'removeDups'の中で動かされた場合、_then_' removeDups'は実際にその名前に値するでしょう。 –
Collections.frequencyは 'O(n)'の順であると考えると、ハッシュマップを使うとよりうまくいくでしょう。 –