如何在 Java 中创建处理数组泛型的 ensureCapacity 方法

亚当·维韦罗

所以,我正在创建一个名为“Sack”的通用数据结构。在此,我将物品添加到麻袋中,抓取随机物品,查看它是否为空,或倾倒其内容等。此外,我正在创建它以扩展以容纳所需的尽可能多的物品。

我目前正在研究一个 ensureCapacity 方法,它应该确保麻袋具有其参数值的容量,如果没有,则为麻袋创建一个新的基础数据结构,该数据结构是麻袋当前容量的两倍多。

我已经尝试了多种方法来执行此操作,但我一直收到错误消息。我会删除我的大部分代码,还会列出我尝试过的两种方法,并指出我收到的错误。

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;
}

第一个:在这个错误中,主要是当我运行我的测试时说

断言失败错误:ensureCapacity 工作不正常

private void ensureCapacity(int capacity)
{
   if (size != capacity)
    {
        int newCapacity = (capacity * 2) + 1;
        elementData[capacity] = elementData[newCapacity];
    }
}

一点更新,我会发布我的测试。你们可以检查一下并告诉我,但是我根本无法修改我的测试。只有我的代码。我评论了第一行,因为那是我发生错误的地方。

@Test
public void testEnsureCapacity()
{
    assertEquals(2, ensureCapacity.getModifiers(), "ensureCapacity does not have the correct modifiers"); // My error occurs here currently. 
    try
    {
        for(int i=0; i<=10; ++i)
        {
            ensureCapacity.invoke(s, i);
            assertEquals(10, ((Object[])elementData.get(s)).length, "ensureCapacity is not working correctly (capacity changing unnecessarily)");
        }
        ensureCapacity.invoke(s, 11);
        assertEquals(21, ((Object[])elementData.get(s)).length, "ensureCapacity is not working correctly (capacity not increased correctly)");

        Random rand = new Random();
        int capacity = rand.nextInt(100)+1;
        s = new Sack<Integer>(capacity);
        for(int i=0; i<=capacity; ++i) {
            ensureCapacity.invoke(s, i);
            assertEquals(capacity, ((Object[])elementData.get(s)).length, "ensureCapacity is not working correctly (capacity changing unnecessarily)");
        }
        ensureCapacity.invoke(s, capacity+1);
        assertEquals(capacity*2+1, ((Object[])elementData.get(s)).length, "ensureCapacity is not working correctly (capacity not increased correctly)");
    } catch (Exception e) {
        fail("ensureCapacity is not working correctly");
    }
}
亚当·维韦罗

我想通了,这就是我的问题的解决方案。

private void ensureCapacity(int capacity)
{
    if (elementData.length < capacity)
    {
        int newCapacity = elementData.length * 2 + 1;
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Java 中创建处理泛型和数组的抓取方法

来自分类Dev

如何在Java中创建泛型的固定大小的数组?

来自分类Dev

如何在Java中实现泛型方法

来自分类Dev

如何在C#中创建泛型方法重载?

来自分类Dev

如何在Java中创建泛型类的实例?

来自分类Dev

如何实现Java方法在Scala中返回使用数组参数化的泛型类型?

来自分类Dev

Java-如何创建调用接口方法的泛型类?

来自分类Dev

如何在Java的main方法中创建静态数组?

来自分类Dev

如何在Java方法中使用泛型

来自分类Dev

如何在JAVA中的泛型类中使用override方法

来自分类Dev

如何在Java中创建通用方法?

来自分类Dev

如何从泛型方法参数中获取Java类?

来自分类Dev

如何创建泛型方法

来自分类Dev

如何在Java中将泛型列表类作为参数传递给泛型方法?

来自分类Dev

如何在Java中将泛型列表类作为参数传递给泛型方法?

来自分类Dev

如何在Java中为复杂的泛型类型创建别名?

来自分类Dev

如何获取Java中泛型数组的值?

来自分类Dev

如何在Java中使用泛型复制数组

来自分类Dev

如何正确创建在Java中扩展泛型接口的有界泛型类

来自分类Dev

如何重写泛型方法Java

来自分类Dev

Java:泛型方法如何工作?

来自分类Dev

equals方法如何在Java中工作

来自分类常见问题

如何在Java中重写toString()方法?

来自分类Dev

如何在Java中实现方法链接?

来自分类Dev

如何在Java方法中检测递归

来自分类Dev

如何在JSTL中调用Java方法?

来自分类Dev

如何在Java中实现接口方法?

来自分类Dev

如何在JavaScript中调用Java方法

来自分类Dev

如何在Java方法中检测递归

Related 相关文章

热门标签

归档