private void resetTailBlock() { tailDirIdx = toDirectoryIndex(size); tailBlkIdx = toBlockIndex(size); tailBlock = directory[tailDirIdx]; }
/** {@inheritDoc} */ @Override public T set(int index, T element) { if (index < 0 || size <= index) throw new IndexOutOfBoundsException(String.valueOf(index)); T[] blockRef = directory[toDirectoryIndex(index)]; int blockIdx = toBlockIndex(index); T old = blockRef[blockIdx]; blockRef[blockIdx] = element; return old; }
/** {@inheritDoc} */ @Override public T get(int index) { if (index < 0 || size <= index) throw new IndexOutOfBoundsException(String.valueOf(index)); return directory[toDirectoryIndex(index)][toBlockIndex(index)]; }
/** * Initialize an empty list with an expected capacity. * * @param capacity * number of elements expected to be in the list. */ public BlockList(int capacity) { int dirSize = toDirectoryIndex(capacity); if ((capacity & BLOCK_MASK) != 0 || dirSize == 0) dirSize++; directory = BlockList.<T> newDirectory(dirSize); directory[0] = BlockList.<T> newBlock(); tailBlock = directory[0]; }
if (index == size - 1) { T[] blockRef = directory[toDirectoryIndex(index)]; int blockIdx = toBlockIndex(index); T old = blockRef[blockIdx];
private void resetTailBlock() { tailDirIdx = toDirectoryIndex(size); tailBlkIdx = toBlockIndex(size); tailBlock = directory[tailDirIdx]; }
@Override public T get(int index) { if (index < 0 || size <= index) throw new IndexOutOfBoundsException(String.valueOf(index)); return directory[toDirectoryIndex(index)][toBlockIndex(index)]; }
/** {@inheritDoc} */ @Override public T set(int index, T element) { if (index < 0 || size <= index) throw new IndexOutOfBoundsException(String.valueOf(index)); T[] blockRef = directory[toDirectoryIndex(index)]; int blockIdx = toBlockIndex(index); T old = blockRef[blockIdx]; blockRef[blockIdx] = element; return old; }
/** {@inheritDoc} */ @Override public T get(int index) { if (index < 0 || size <= index) throw new IndexOutOfBoundsException(String.valueOf(index)); return directory[toDirectoryIndex(index)][toBlockIndex(index)]; }
private void resetTailBlock() { tailDirIdx = toDirectoryIndex(size); tailBlkIdx = toBlockIndex(size); tailBlock = directory[tailDirIdx]; }
@Override public T set(int index, T element) { if (index < 0 || size <= index) throw new IndexOutOfBoundsException(String.valueOf(index)); T[] blockRef = directory[toDirectoryIndex(index)]; int blockIdx = toBlockIndex(index); T old = blockRef[blockIdx]; blockRef[blockIdx] = element; return old; }
/** * Initialize an empty list with an expected capacity. * * @param capacity * number of elements expected to be in the list. */ public BlockList(int capacity) { int dirSize = toDirectoryIndex(capacity); if ((capacity & BLOCK_MASK) != 0 || dirSize == 0) dirSize++; directory = BlockList.<T> newDirectory(dirSize); directory[0] = BlockList.<T> newBlock(); tailBlock = directory[0]; }
/** * Initialize an empty list with an expected capacity. * * @param capacity * number of elements expected to be in the list. */ public BlockList(int capacity) { int dirSize = toDirectoryIndex(capacity); if ((capacity & BLOCK_MASK) != 0 || dirSize == 0) dirSize++; directory = BlockList.<T> newDirectory(dirSize); directory[0] = BlockList.<T> newBlock(); tailBlock = directory[0]; }
if (index == size - 1) { T[] blockRef = directory[toDirectoryIndex(index)]; int blockIdx = toBlockIndex(index); T old = blockRef[blockIdx];
@Override public T remove(int index) { if (index == size - 1) { // Fast-path: remove the last element. T[] blockRef = directory[toDirectoryIndex(index)]; int blockIdx = toBlockIndex(index); T old = blockRef[blockIdx]; blockRef[blockIdx] = null; size--; if (0 < tailBlkIdx) tailBlkIdx--; else resetTailBlock(); return old; } else if (index < 0 || size <= index) { throw new IndexOutOfBoundsException(String.valueOf(index)); } else { // Slow-path: the list needs to contract and remove. // Do this the naive way, callers shouldn't abuse // this class by entering this code path. // T old = get(index); for (; index < size - 1; index++) set(index, get(index + 1)); set(size - 1, null); size--; resetTailBlock(); return old; } }