public E get(Object index) { Entry e = seek(index, hash(index)); return (E) (e == null ? null : e.key); }
@Override public boolean contains(Object obj) { return seek(obj, hash(obj)) != null; }
@Override public int indexOf(Object obj) { Entry e = seek(obj, hash(obj)); if (e == null) { return -1; } Object o = e.key; Object[] data = elementData; int i = size; while (i-- > 0) { if (data[i] == o) { break; } } return i; }
@Override public boolean add(E obj) { int hash = hash(obj); if (seek(obj, hash) != null) { return false; } add(obj, hash); return true; }
@Override public E set(int index, E obj) { checkElementIndex(index); int hash = hash(obj); if (seek(obj, hash) != null) { // return null; throw new IllegalArgumentException("Duplicate entries not allowed"); } ++modCount; Entry e = seek(elementData[index], hash(elementData[index])); delete(e); elementData[index] = obj; insert(new Entry(obj, hash)); return (E) e.key; }
@Override public boolean remove(Object obj) { Entry e = seek(obj, hash(obj)); if (e == null) { return false; } Object o = e.key; Object[] data = elementData; for (int i = size; i-- > 0; ) { if (data[i] == o) { fastRemove(i); break; } } delete(e); return true; }
@Override public void add(int index, E obj) { checkPositionIndex(index); int hash = hash(obj); if (seek(obj, hash) != null) { throw new IllegalArgumentException("Duplicate entries not allowed"); } if (index == size) { add(obj, hash); return; } ensureCapacityInternal(++size); System.arraycopy(elementData, index, elementData, index + 1, size - index - 1); elementData[index] = obj; insert(new Entry(obj, hash)); rehashIfNecessary(); }
@Override public E remove(int index) { checkElementIndex(index); E oldValue = index(index); delete(seek(oldValue, hash(oldValue))); fastRemove(index); return oldValue; }