因此,我正在创建一个名为“ Sack”的通用数据结构。在此方法中,我将物品添加到麻袋,抓取随机物品,查看物品是否为空或丢弃其内容等。此外,我还在创建它以扩展为容纳所需的物品。
当前,我正在研究add方法,而我的add方法遇到了麻烦,我正在尝试一种将参数中的内容添加到麻袋中的方法。
import java.util.Arrays;
public class Sack<E>
{
public static final int DEFAULT_CAPACITY = 10;
private E [] elementData;
private int size;
@SuppressWarnings("unchecked")
public Sack()
{
elementData = (E[]) new Object[DEFAULT_CAPACITY];
}
@SuppressWarnings("unchecked")
public Sack(int capacity)
{
if(capacity < 0)
{
throw new IllegalArgumentException("capacity " + capacity);
}
this.elementData = (E[]) new Object[capacity];
}
public boolean isEmpty()
{
if(size == 0)
{
return true;
}
else
{
return false;
}
}
public E [] dump()
{
E [] E2 = Arrays.copyOf(elementData, size);
for(int i = 0; i < size; i++)
{
elementData[i] = null;
}
size = 0;
return E2;
}
在这种方法中,我试图将商品添加到麻袋中。运行测试时,我被告知这是不正确的。如果有办法可以改善这一点。
public void add(E item)
{
elementData[size] = item;
size++;
}
elementData是我要添加的项目。
更新
我更新了add方法,使其看起来像这样。
public void add(E item)
{
if(size >= elementData.length-1)
{
elementData[size] = item;
size++;
}
}
我现在收到的消息是add无法正常工作并检查大小用法。
答案 0 :(得分:1)
听起来好像有一个关于您的麻袋应该做的规格的事情,但您没有粘贴。
听起来,即使麻袋已满,您的add方法也应该可以正常工作。
这意味着您需要创建一个新的数组,复制所有元素,然后用新的数组替换您在Sack实例中拥有的数组(因为Java数组无法增长或收缩)。
查看Java自己的ArrayList的来源以获取有关操作方法的提示。
答案 1 :(得分:1)
您不能确保Java数组的容量,而Javascript可以!您可以创建一个新副本并复制:
public void add(E element) {
int index = size++;
if(size >= elementData.length-1) {
// it ensures elementData
elementData = java.util.Arrays.copyOf(elementData, size);
}
elementData[index] = element;
}
或跳过确保阵列容量的操作并更改检查方向:
public void add(E element) {
if(size < elementData.length-1) {
elementData[size++] = element;
}
// TODO else notice of the unsuccessfull add
}
答案 2 :(得分:0)
因此,在进行了无数次尝试之后,我感谢@rockfarkas解决了这个问题。我输入以下代码,它解决了我的add方法代码。
public void add(E item)
{
int index = size++;
if(size >= elementData.length-1)
{
elementData = Arrays.copyOf(elementData, size);
}
elementData[index] = item;
}
答案 3 :(得分:0)
这是另一种方式,
public void add(E item)
{
ensureCapacity(size+1);
elementData[size] = item;
size++;
}
这也可行,但是我必须准确地修改我拥有的suresureCapacity方法。