@Override public boolean addAll(int index, Collection<? extends E> c) { ensureCapacity(size() + c.size()); boolean modified = false; for (E e : c) { if (contains(e)) { continue; } add(index++, e); itemSet.add(e); modified = true; } return modified; }
@Override public E set(int index, E element) { if (contains(element)) { // Element already exist in the list if (get(index) == element) { // At the same position, nothing to be done return element; } else { // Adding at another position. We assume this is a sort // operation and temporarily allow it. // We could just remove (null) the old element and keep the list // unique. This would require finding the index of the old // element (indexOf(element)) which is not a fast operation in a // list. So we instead allow duplicates temporarily. addDuplicate(element); } } E old = super.set(index, element); removeFromSet(old); itemSet.add(element); return old; }
@Override public int indexOf(Object o) { if (!contains(o)) { return -1; } return super.indexOf(o); }
/** * Constructor for an abstract in-memory container. */ protected AbstractInMemoryContainer() { setAllItemIds(new ListSet<ITEMIDTYPE>()); }
@Override protected void removeRange(int fromIndex, int toIndex) { HashSet<E> toRemove = new HashSet<E>(); for (int idx = fromIndex; idx < toIndex; idx++) { toRemove.add(get(idx)); } super.removeRange(fromIndex, toIndex); itemSet.removeAll(toRemove); }
/** * Works as java.util.ArrayList#add(int, java.lang.Object) but returns * immediately if the element is already in the ListSet. */ @Override public void add(int index, E element) { if (contains(element)) { // Duplicates are not allowed return; } super.add(index, element); itemSet.add(element); }
wasUnfiltered = true; setFilteredItemIds(new ListSet<ITEMIDTYPE>());
@Override public boolean add(E e) { if (contains(e)) { // Duplicates are not allowed return false; } if (super.add(e)) { itemSet.add(e); return true; } else { return false; } }
@Override public int lastIndexOf(Object o) { if (!contains(o)) { return -1; } return super.lastIndexOf(o); }