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