如何通过Java中的参数将项目添加到数组通用对象中

时间:2019-03-03 01:16:27

标签: java arrays generics

因此,我正在创建一个名为“ 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无法正常工作并检查大小用法。

4 个答案:

答案 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方法。