public class DataContainer<T> {
T[] data;
DataContainer(T[] data) {
this.data = data;
}
public int add(T item) {
int i = 0;
for (; i < data.length ; i++) {
if (item == null) {
return -1;
}
if (data[i] == null) {
data[i] = item;
break;
}
}
if (data.length >1&&data[i-1] != item) {
data = Arrays.copyOf(data,data.length+1);
data[i] = item;
}
if (data.length ==1&&data[i-1] != item ) {
data = Arrays.copyOf(data,data.length+1);
data[i] = item;
}
if (data.length==0) {
data = Arrays.copyOf(data,1);
if (data[i] != item ) {
data[i] = item;
}
}
return i;
}
public T[] getItem() {
return data;
}
public T get(int index) {
if (data.length <=index) {
return null;
}
return data[index] ;
}
public boolean delete(int index) {
for (int i = index; i < data.length; i++) {
if (data[i] == data[index]) {
for (int j = index; j < data.length; j++) {
data[i] = data[j];
}
}
data = Arrays.copyOf(data,data.length -1);
return true;
}
return false;
}
}
MAIN
public class DataContainerMain {
public static void main(String[] args) {
DataContainer<Integer> dc = new DataContainer<>(new Integer[]{1,2,3});
System.out.println(dc.add(5));
System.out.println(dc.delete(1));
System.out.println(Arrays.toString(dc.getItem()));
}
}
例如,在删除包含数据的数组时 - 1,2,3 我添加 5,然后我删除索引 1 处的元素,然后它应该变成 - 1,3,5,但结果是 1, 5,3 并且总是交换最后两个元素。为什么?
我完全不明白这是在做什么。
这个循环有什么作用?
我会告诉你他是做什么的。将多个值一个接一个地写入同一位置。你能用人类语言描述你想在这里做什么吗?
而在被删除元素所在的地方,应该是什么?嗯,写
就是这样。
为什么所有这些代码?两行就够了。
我们得到输出
我不知道你在做什么这么复杂,但添加只是将数组的大小增加 +1 并将新元素写入最后一个位置。
删除也没什么复杂的(不检查它是否在数组中),向左移动并修剪数组。