重新填充一个 java 数组
Re-fill a java array
我需要快速填充一大堆固定大小的数组。我的想法是:
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} 填充已填充数组的方法。
如何用新的值列表重新填充它?
非常感谢任何帮助。
问候,
乔治
尝试使用 ArrayList,然后在最后将其转换为数组。
List<Integer> list = new ArrayList<>();
.... // your inserts into the list here
int[] filler_array = list.toArray();
以这种方式添加新元素要容易得多。
TL;DR - 重新填充效率低下。避免这样做。
将填充数组移出 class 并为每个数组创建一个单独的变量。例如:
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
}
推理:如果在fillArrays
里面初始化了filler_array
,那么每次调用该方法都会执行初始化代码。 (您使用的数组初始值设定项很可能会在幕后执行复制。)
通过使用在 class(或实例)级别声明的变量,初始化在 class 初始化时间(或实例初始化时间)发生一次。
此外,考虑到您使用 filler_array
(作为副本的来源)的方式,您通过在其上复制数据几乎没有取得任何成就。
我需要快速填充一大堆固定大小的数组。我的想法是:
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} 填充已填充数组的方法。 如何用新的值列表重新填充它?
非常感谢任何帮助。 问候, 乔治
尝试使用 ArrayList,然后在最后将其转换为数组。
List<Integer> list = new ArrayList<>();
.... // your inserts into the list here
int[] filler_array = list.toArray();
以这种方式添加新元素要容易得多。
TL;DR - 重新填充效率低下。避免这样做。
将填充数组移出 class 并为每个数组创建一个单独的变量。例如:
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
}
推理:如果在fillArrays
里面初始化了filler_array
,那么每次调用该方法都会执行初始化代码。 (您使用的数组初始值设定项很可能会在幕后执行复制。)
通过使用在 class(或实例)级别声明的变量,初始化在 class 初始化时间(或实例初始化时间)发生一次。
此外,考虑到您使用 filler_array
(作为副本的来源)的方式,您通过在其上复制数据几乎没有取得任何成就。