ArrayList<String> values=new ArrayList<String>();
values.add("s");
values.add("n");
values.add("a");
values.add("s");
在此数组中,我想删除重复的值。
答案 0 :(得分:49)
试试这个......
ArrayList<String> values=new ArrayList<String>();
HashSet<String> hashSet = new HashSet<String>();
hashSet.addAll(values);
values.clear();
values.addAll(hashSet);
快乐的编码......
答案 1 :(得分:20)
尝试以下代码,
ArrayList<String> values=new ArrayList<String>();
String newValue;
// repeated additions:
if (!values.contains(newValue)) {values.add(newValue);}
答案 2 :(得分:8)
HashSet hs = new HashSet();
hs.addAll(demoArrayList); // demoArrayList= name of arrayList from which u want to remove duplicates
demoArrayList.clear();
demoArrayList.addAll(hs);
答案 3 :(得分:2)
我认为实施独特数组列表的一个真正简洁的解决方案是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;
}
}
答案 4 :(得分:1)
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
操作也被修改。 documentation州:
返回:如果此列表因调用而更改,则返回true。
我修改了方法以反映此行为。还有一个问题。 addAll()方法的文档还指出:
将指定集合中的所有元素按指定集合的迭代器返回的顺序附加到此列表的末尾。
使用此方法可能会破坏订单。此问题的可能解决方法可能是不支持addAll
方法。