ArrayList<String> values=new ArrayList<String>();
values.add("s");
values.add("n");
values.add("a");
values.add("s");
この配列では、繰り返される値を削除します。
これを試して...
ArrayList<String> values=new ArrayList<String>();
HashSet<String> hashSet = new HashSet<String>();
hashSet.addAll(values);
values.clear();
values.addAll(hashSet);
ハッピーコーディング...
以下のコードを試してください、
ArrayList<String> values=new ArrayList<String>();
String newValue;
// repeated additions:
if (!values.contains(newValue)) {values.add(newValue);}
HashSet hs = new HashSet();
hs.addAll(demoArrayList); // demoArrayList= name of arrayList from which u want to remove duplicates
demoArrayList.clear();
demoArrayList.addAll(hs);
ユニークな配列リストを強制するための本当のきちんとした解決策は、達成しようとしているものに対してあまり多くのコードではない場合、 this one であると思います。
public class UniqueOverridingList extends ArrayList {
public enum LAST_RESULT {
ADD, OVERRIDE, NOTHING;
}
private LAST_RESULT lastResult;
public boolean add(T obj) {
for (int i = 0; i < size(); i++) {
if (obj.equals(get(i))) {
set(i, obj);
lastResult = LAST_RESULT.OVERRIDE;
return true;
}
}
boolean b = super.add(obj);
if (b) {
lastResult = LAST_RESULT.ADD;
} else {
lastResult = LAST_RESULT.NOTHING;
}
return b;
}
public boolean addAll(Collection c) {
boolean result = true;
for (T t : c) {
if (!add(t)) {
result = false;
}
}
return result;
}
public LAST_RESULT getLastResult() {
return lastResult;
}
}
David Hedlundが提案したクラスは、もっと短くすることができます。
public class UniqueArrayList extends ArrayList {
/**
* Only add the object if there is not
* another copy of it in the list
*/
public boolean add(T obj) {
if(this.contains(obj))
return false;
return super.add(obj);
}
public boolean addAll(Collection c) {
boolean result = false;
for (T t : c) {
if (add(t)) {
result = true;
}
}
return result;
}
}
addAll
操作も変更されます。 ドキュメント 状態:
戻り値:呼び出しの結果、このリストが変更された場合はtrue。
この動作を反映するようにメソッドを変更しました。まだ1つの問題があります。 addAll()メソッドのドキュメントにも次のように記載されています。
指定されたコレクション内のすべての要素を、指定されたコレクションの反復子によって返される順序で、このリストの最後に追加します。
この方法を使用すると、順序が崩れる場合があります。この問題の可能な回避策は、addAll
メソッドをサポートしていないことです。