gpt4 book ai didi

java - 通用数组列表

转载 作者:行者123 更新时间:2023-12-01 09:27:16 25 4
gpt4 key购买 nike

我需要使用泛型创建一个数组列表。我的 add 方法有时似乎有效,但是我的 get 方法似乎有很多问题,并且我没有收到编译错误。但是,当我尝试使用 get 方法从数组列表中获取对象时,它会抛出 java 越界异常。这是我到目前为止所拥有的,我正在使用 BlueJ。此外,说明是将初始“幻觉”长度设置为零。

public class AL <X> {
private X[]data;
private int count;

public AL() {
count = 0;
data = (X[]) new Object[0];
}

public void add (X v) {
if (data.length != count) {
data[count] = v;
count++;
} else {
X [] newdata = (X[]) new Object[data.length * 2];
for (int i = 0; i < data.length; i++) {
newdata[i] = data [i];
}
count++;
data = newdata;
}
}

public X get(int index) {
if (index >= count || index < 0) {
throw new ICantEven();
} else {
return data[index];
}
}
}

最佳答案

您的 add 方法不起作用,因为您使用的初始后备数组的长度为 0,即使您尝试将其加倍,长度仍为 0(因为 0*2==0) .

当您调整后备数组的大小时,您还忘记了实际添加新元素。如果您没有忘记这一点,您将在 add 中得到异常。

首先,将构造函数创建的数组的初始大小更改为正值:

data = (X[]) new Object[10];

然后添加

data[count] = v;

add 方法的 else 子句(就在 count++; 之前)。

您的添加方法可以进一步简化:

public  AL()
{
count = 0;
data = (X[]) new Object[10];
}

public void add (X v)
{
// resize backing array if necessary
if (data.length == count)
{
X [] newdata = (X[]) new Object[data.length * 2];
for (int i = 0; i < data.length;i++ )
{
newdata[i] = data [i];
}
data = newdata;
}
// add new element
data[count] = v;
count++;
}

关于java - 通用数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39740888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com