Bạn có nghĩa là thích LinkedHashSet
? Điều này bảo toàn thứ tự của mục nhập, nhưng không cho phép trùng lặp.
IMHO, đó là một yêu cầu bất thường nhưng bạn có thể viết một Danh sách mà không có bản sao.
class SetList<T> extends ArrayList<T> {
@Override
public boolean add(T t) {
return !super.contains(t) && super.add(t);
}
@Override
public void add(int index, T element) {
if (!super.contains(element)) super.add(index, element);
}
@Override
public boolean addAll(Collection<? extends T> c) {
boolean added = false;
for (T t : c)
added |= add(t);
return added;
}
@Override
public boolean addAll(int index, Collection<? extends T> c) {
boolean added = false;
for (T t : c)
if (!super.contains(t)) {
super.add(index++, t);
added = true;
}
return added;
}
}
Comparator
? Ngoài ra, bạn có muốn cả ngữ nghĩa củaList
giao diện không?