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

adding elements of one array to another at a particular place in java

我有两个数组:

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

我想在array1[0]array1[1]之间添加array2,添加array2后,不想删除array1中的任何值,无论array2中的值是什么,都应该按原样添加到array1中,我不希望出现排序顺序。

我该怎么做?


下面的代码返回一个新数组,该数组包含从insertin到index位置的数据,然后返回从toinsert到insertin的所有数据,然后返回insertin的其余数据(此代码尚未完全测试,请为该方法实现单元测试;-)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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]


您需要创建一个新的数组,大小为array1.length + array2.length,然后使用类似System.arrayCopy的东西按需要的顺序放入当前数组,


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

1
2
3
4
5
6
7
8
9
10
11
12
    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];
        }          
    }


您需要第三个数组来完成此操作。

1
2
3
4
5
6
7
8
9
10
    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
2
3
4
5
1
5
3
4
2

array2置于array1值之间的替代方法

1
2
3
4
5
6
7
8
9
10
11
12
    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
2
3
4
5
1
3
4
2
5


下面是使用SystemArrayCopy的方法,它接受两个数组,并将第二个数组插入第一个数组的位置

1
2
3
4
5
6
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; }

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

1
2
3
4
5
6
7
8
9
    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);