2017-06-21 75 views
-2

我需要快速填充整个固定大小的数组。我的想法是这样的:重新填充一个java数组

public void fillArrays(){ 
    int[] filler_array = {0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 
    System.arraycopy(filler_array, 0, spikeWaveB1, 0, 22); 
    filler_array = {0xF4, 0x26, 0x58, 0x8A, 0xBC, 0xEE, 0x20, 0x52, 0x84, 0xB6, 0xE8, 0xF4, 0xC2, 0x90, 0x5E, 0x2C, 0xFA, 0xC8, 0x96, 0x64, 0x32, 0x00}; 
    System.arraycopy(filler_array, 0, spikeWaveB2, 0, 22); 
    filler_array = {... ...}; 
    System.arraycopy(... ...); 
} 

基本上我需要填充{X,Y,Z}已经填充阵列的方式。 如何用新的值列表重新填充它?

任何帮助非常感谢。 Regards, George

+3

'filler_array = null'不会清空数组。 – bradimus

+0

是否https://stackoverflow.com/questions/80476/how-can-i-concatenate-two-arrays-in-java和/或https://stackoverflow.com/questions/20316526/combine-two-integer- array-in-one-array-in-java提供任何帮助? – ZeldaZach

+0

谢谢,我会进一步研究它... 恐怕不是,我不是想要将两个数组结合起来。我需要从[0]开始将一个新的值列表({x,y,z})放入已存在的数组中,然后删除现有的值 – G3or6311

回答

2

TL; DR - 重新填充效率低下。避免这样做。

将填充阵列移出类并为每个填充单独创建一个变量。例如:

private static final int[] filler_array = { 
    0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 
    0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 
private static final int[] filler_array2 = { 
    0xF4, 0x26, 0x58, 0x8A, 0xBC, 0xEE, 0x20, 0x52, 0x84, 0xB6, 0xE8, 
    0xF4, 0xC2, 0x90, 0x5E, 0x2C, 0xFA, 0xC8, 0x96, 0x64, 0x32, 0x00}; 

public void fillArrays(){ 
    System.arraycopy(filler_array, 0, spikeWaveB1, 0, 22); 
    System.arraycopy(filler_array2, 0, spikeWaveB2, 0, 22); 
    // etcetera 
} 

推理:如果初始化filler_arrayfillArrays内,则初始化代码每次调用方法时执行。 (你正在使用的数组初始化器最有可能在后台执行拷贝。)

通过使用在类(或实例)级别声明的变量,在类初始化时(或实例初始化时)。

此外,考虑到您使用filler_array(作为副本的来源)的方式,您通过将数据复制到其上几乎没有实现任何功能。

+0

感谢您深入解答Stephen,非常感谢。 – G3or6311

0

尝试使用ArrayList,然后在最后将其转换为数组。

List<Integer> list = new ArrayList<>(); 
.... // your inserts into the list here 
int[] filler_array = list.toArray(); 

这样更容易添加新元素。