如何修复列表中的差距?
How to fix the gap in the list?
ensureCapacity 方法在列表中创建更多 space 以便可以将更多元素添加到列表中。该方法的问题在于它可能会在列表中造成空白。我该如何弥补这个差距?
public class UnboundedList<K extends Comparable<K>,V> extends SimpleBoundedList<K,V> {
public UnboundedList(int bound) {
super(bound);
}
@Override
public boolean add(K key, V value) {
ensureCapacity();
super.add(key, value);
return true;
}
private void ensureCapacity() {
if (this.size() == this.values.length) {
Object[] newArray = new Object[values.length * 2];
for (int i = 0; i < values.length; ++i) {
newArray[i] = values[i];
}
this.values = newArray;
}
}
}
您必须确保列表的大小能够补偿在添加之前添加的值。
public final void onEnsureCapacity(final Object[] pObjects) {
if((this.getSize() + pObjects.length) > this.getValues().length) {
/* Resize to accommodate. */
}
}
这段代码所做的是检查如果当前 'virtual' 列表大小加上要添加到列表中的数组大小大于当前大小,我们必须选择一个数组大小这将容纳两者。
ensureCapacity 方法在列表中创建更多 space 以便可以将更多元素添加到列表中。该方法的问题在于它可能会在列表中造成空白。我该如何弥补这个差距?
public class UnboundedList<K extends Comparable<K>,V> extends SimpleBoundedList<K,V> {
public UnboundedList(int bound) {
super(bound);
}
@Override
public boolean add(K key, V value) {
ensureCapacity();
super.add(key, value);
return true;
}
private void ensureCapacity() {
if (this.size() == this.values.length) {
Object[] newArray = new Object[values.length * 2];
for (int i = 0; i < values.length; ++i) {
newArray[i] = values[i];
}
this.values = newArray;
}
}
}
您必须确保列表的大小能够补偿在添加之前添加的值。
public final void onEnsureCapacity(final Object[] pObjects) {
if((this.getSize() + pObjects.length) > this.getValues().length) {
/* Resize to accommodate. */
}
}
这段代码所做的是检查如果当前 'virtual' 列表大小加上要添加到列表中的数组大小大于当前大小,我们必须选择一个数组大小这将容纳两者。