微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 如何在数组中间添加?

我试图创建一个名为insertAt的方法,它接受3个参数(int index,int n,int value),这样如果我调用
list.insertAt(2,4,98)在[12,42,8,934]的数组上,它现在应该存储[12,98,934].

int index是我开始放置值的地方

int n是多少个值

int value是我想要放入的实际值或数字.

我在一个名为ArrayIntList的类中创建此方法

public class ArrayIntList {
    private int[] elementData; // list of integers
    private int size;          // current # of elements in the list 
}

我尝试制作下面的方法,但我仍然坚持我所缺少的.如果你们可以帮助我,我会非常感激!

public void insertAt(int index,int value) {
    if (index < 0 || index > size || n < 0) {
        throw new IllegalArgumentException();
    }
    size = size + n;
    for (int i = 0; i < n; i++) {
        elementData[(size - 1) - i] = elementData[(size - n) + i];
        elementData[n + i] = value;
    }
}

解决方法

示例中的数组只包含4个值,但您尝试添加4个值.由于数组具有固定长度,因此这是不可能的.所以你必须创建一个长度为n的新数组:

int[] newElements = new int[size + n];

然后,您必须将所有元素从0复制到索引,并将索引元素从旧版本复制到新数组:

System.arraycopy(elementData,newElements,index);
System.arraycopy(elementData,index,index + n,size - index);

然后你必须将新元素插入数组n次:

Arrays.fill(newElements,value);

最后,您必须将新数组重新分配给旧实例1并设置新大小:

elementData = newElements;
size += n;

我已经使用了JDK中的一些辅助方法,比如System.arraycopy,它具有以下签名:

void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);

它将src中的元素从srcPos复制到srcPos长度,复制到dest,从destPos到destPost长度

Array.fill也是一个很好的帮手,具有以下签名:

void fill(int[] a,int fromIndex,int toIndex,int val)

它使用值val从fromIndex到toIndex填充数组a

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐