Java 通用列表添加方法
我试图创建一个方法,在列表中的指定位置插入元素。 然后将当前位于该位置的元素和后续元素移动到 通过在他们的索引中添加一个,我知道这个方法有捷径,但我想这样做,这里是我试图做的,但它不起作用Java 通用列表添加方法,java,arrays,arraylist,Java,Arrays,Arraylist,我试图创建一个方法,在列表中的指定位置插入元素。 然后将当前位于该位置的元素和后续元素移动到 通过在他们的索引中添加一个,我知道这个方法有捷径,但我想这样做,这里是我试图做的,但它不起作用 private T a[]; private int count; private int size = 0; public int size() { return size; } public void add(int index,T t) throws Exception { if
private T a[];
private int count;
private int size = 0;
public int size() { return size; }
public void add(int index,T t) throws Exception {
if (index < 0 || index > = a.length){
throw new IndexOutOfBoundsException();
}
Object[] temp = new Object[a.length + 1];
for (int k = 0, j = 0; j < temp.length; ++ k, ++ j){
if ( k == index ) {
temp[index] = t;
--k;
} else {
temp[j] = a[index]; //
}
}
a = (T[]) temp;
}
private T a[];
私人整数计数;
私有整数大小=0;
public int size(){return size;}
public void add(int index,T)引发异常{
如果(索引<0 | |索引>=a.length){
抛出新的IndexOutOfBoundsException();
}
对象[]临时=新对象[a.length+1];
对于(int k=0,j=0;j
换档的诀窍是从右侧开始,因此:
for (int i = size; i > index; i--) {
a[i] = a[i - 1];
}
顺便说一句,当增加大小时,通常您会将其大小增加一倍,而不仅仅是增加1。我更正了您的“for”块,请尝试以下操作:
for (int k = 0, j = 0; j < temp.length; ++k, ++j){
if ( k == index ) {
temp[index] = t;
--k;
index = -1;
} else {
temp[j] = a[k];
}
}
for(int k=0,j=0;j
我补充了2个修正:
index=-1代码>-为了只输入一次if条件,否则将持续输入条件
temp[j]=a[k]代码>-替换为[k],您总是从[index]取值表示相同的位置,这是不正确的
祝你好运:)移位的诀窍是从右边开始,比如(
for(inti=last;i>=first;i--){temp[i+1]=temp[i];}
调用add()
的结果通常是列表变大,因此大小保持不变是一个巨大的警告信号!!--与此相关,检查是否应该是index>size
而不是index>=a.length
?