Vì vậy, việc thực hiện các mảng như vậy có thể như thế này
import java.util.AbstractList;
import java.util.List;
import java.util.RandomAccess;
public class IntArrayList extends AbstractList<Integer>
implements List<Integer> , RandomAccess /* todo , Cloneable, java.io.Serializable */{
private static final int INT_SIZE_MINUS_ONE = 15;
private static final int RIGHT_SHIFT = 4;
private int size;
private int isNull[];
private int data[];
IntArrayList(int size) {
if (size < 0) {
throw new RuntimeException("invalid size");
}
this.size = size;
isNull = new int[(size + INT_SIZE_MINUS_ONE) >>> RIGHT_SHIFT];
data = new int[size];
}
private void rangeCheck(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
}
public Integer set(int index, Integer element) {
rangeCheck(index);
Integer oldValue = get(index);
if (element == null) {
isNull[index >>> RIGHT_SHIFT] &= ~(1 << (index & INT_SIZE_MINUS_ONE));
} else {
isNull[index >>> RIGHT_SHIFT] |= (1 << (index & INT_SIZE_MINUS_ONE));
data[index] = element;
}
return oldValue;
}
@Override
public Integer get(int index) {
rangeCheck(index);
if ((isNull[index >>> RIGHT_SHIFT] & (1 << (index & INT_SIZE_MINUS_ONE))) == 0) {
return null;
}
return new Integer(data[index]);
}
@Override
public int size() {
return size;
}
public boolean isEmpty() {
return size == 0;
}
}
Nó có thể được sử dụng bất cứ nơi nào như List<Integer>
loại như vậy của đối tượng có thể hữu ích cho việc lưu trữ lâu dài của thông tin mà ít được sử dụng. Nó sẽ làm giảm sự phân mảnh của đống với chi phí phát sinh rác tăng lên khi tiếp cận các yếu tố.
@ 01 - hoàn toàn đồng ý về thẻ 'tối ưu hóa sớm' - đây chỉ là cuộc thảo luận lý thuyết mà tất cả chúng ta đều thích làm đôi khi. – ripper234