在java中的特定位置添加一个数组的元素到另一个数组

时间:2015-08-14 06:52:02

标签: java arrays

我有两个数组:

byte[] array1=new byte[]{0x01,0x05};
byte[] array2=new byte[]{0x03,0x04,0x02};

我想在array2array1[0]之间添加array1[1]。我不想在添加array1后删除array2中的任何值。作为array2中的值,它应该按原样添加到array1。我不期望排序顺序。

我该怎么做?

6 个答案:

答案 0 :(得分:2)

您需要创建一个大小为array1.length + array2.length的新数组,然后使用System.arrayCopy之类的内容按照您需要的顺序输入当前数组,

答案 1 :(得分:2)

以下代码返回一个新数组,其中包含 insertIn 到索引位置的数据,然后是 toInsert 中的所有数据,然后是其他数据 insertIn (此代码未经过全面测试,请对该方法实施单元测试;-))

import static java.lang.System.arraycopy;
import java.util.Arrays;

public class MyCopy {

    public static void main(String[] args) {
        byte[] array1 = new byte[] {0x01, 0x05 };
        byte[] array2 = new byte[] {0x03, 0x04, 0x02 };

        // add array 2 in array 1 at index 1
        byte[] inserted = insertIn(array1, array2, 1);
        System.out.println(Arrays.toString(inserted));
    }

    public static byte[] insertIn(byte[] insertIn, byte[] toInsert, int position) {
        assert position > 0 && position <= insertIn.length;

        byte[] result = new byte[insertIn.length + toInsert.length];
        // copy start of insertIn
        arraycopy(insertIn, 0, result, 0, position);
        // copy toInsert
        arraycopy(toInsert, 0, result, position, toInsert.length);
        // copy rest of insertIn
        int restIndexInResult = position + toInsert.length;
        int restLength = toInsert.length - position - 1;
        arraycopy(insertIn, position, result, restIndexInResult , restLength);
        return result;
    }
}

结果:[1,3,4,2,5]

答案 2 :(得分:1)

您需要第三个数组来完成此任务。

    byte[] array1=new byte[]{0x01,0x05};
    byte[] array2=new byte[]{0x03,0x04,0x02};
    byte[] targetArray = new byte[array1.length + array2.length];

    System.arraycopy(array1, 0, targetArray, 0, array1.length);
    System.arraycopy(array2, 0, targetArray, array1.length, array2.length);

    for (byte b : targetArray) {
        System.out.println(b);
    }

结果:

1
5
3
4
2

array2放在array1个值

之间的替代方法
    byte[] array1=new byte[]{0x01,0x05};
    byte[] array2=new byte[]{0x03,0x04,0x02};
    byte[] targetArray = new byte[array1.length + array2.length];
    int cap = array1.length / 2;

    System.arraycopy(array1, 0, targetArray, 0, cap);
    System.arraycopy(array2, 0, targetArray, cap, array2.length);
    System.arraycopy(array1, cap, targetArray, array2.length + cap, array1.length - cap);

    for (byte b : targetArray) {
        System.out.println(b);
    }

结果:

1
3
4
2
5

答案 3 :(得分:1)

一个简单的解决方案可以是:

    byte[] array1=new byte[]{0x01,0x05};
    byte[] array2=new byte[]{0x02,0x03,0x04};

    byte[] newArray = new byte[array1.length+array2.length];
    newArray[0]=array1[0];
    for(int i=1; i<newArray.length; i++){
        if(i<=array2.length){
            newArray[i]=array2[i-1];
        }else{
            newArray[i]=array1[i-3];
        }           
    }

答案 4 :(得分:0)

你可以使用下面的代码来组合两个数组,你必须创建第三个数组,它将保存两个数组数据:

    byte[] array1=new byte[]{0x01,0x05};
    byte[] array2=new byte[]{0x02,0x03,0x04};

    int array1Len = array1.length;
    int array2Len = array2.length;
    byte[] array3 = new byte[array1Len+array2Len];

    System.arraycopy(array1, 0, array3, 0, array1Len);
    System.arraycopy(array2, 0, array3, array1Len, array2Len);

答案 5 :(得分:0)

这是使用systemarraycopy的方法,它接受两个数组和位置,你希望在第一个数组中插入第二个数组

public static byte[] append(byte[] a, byte[] b,int position) {
byte[] c= new byte[a.length+b.length];
System.arraycopy(a, 0, c, 0, position);
System.arraycopy(b, 0, c, position, b.length);
System.arraycopy(a, position , c, position + b.length , a.length - position);
return c; }