当前位置: 代码迷 >> java >> 如何通过Java中的参数将项目添加到数组通用对象中
  详细解决方案

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

热度:84   发布时间:2023-07-25 19:27:21.0

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

听起来好像有一个关于您的麻袋应该做的规格的事情,但您没有粘贴。

听起来,即使麻袋已满,您的add方法也应该可以使用。

这意味着您需要创建一个新的数组,复制所有元素,然后用新的数组替换您在Sack实例中拥有的数组(因为Java数组无法增长或收缩)。

查看Java自己的ArrayList的来源,以获取有关如何完成操作的提示。

您不能确保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
}

因此,经过无数次尝试,我将@rockfarkas归功于其解决了这一问题。 我输入以下代码,它解决了我的add方法代码。

public void add(E item)
{
    int index = size++;
    if(size >= elementData.length-1)
    {
        elementData = Arrays.copyOf(elementData, size);
    }
    elementData[index] = item;
}

这是另一种方式

public void add(E item) 
{
    ensureCapacity(size+1);
    elementData[size] = item;
    size++;
}

这也可以,但是我必须准确地修改我的ensureCapacity方法。

  相关解决方案