我有这个方法,它在字节数组的开头添加空格。问题是我不确定这是否是这项任务最快的实施。是否有一些选项可以更快地添加空间?如果是,请在此处添加一些溶剂
public static byte[] doplnMezery(byte[] item, int numberOfSpaces) {
int lenghtOfItem = item.length;
for (int i = lenghtOfItem; i < numberOfSpaces; i++) {
item = ArrayUtils.add(item, 0, (byte) 32);
}
return item;
}
答案 0 :(得分:4)
这似乎效率低下,因为add
方法的运行速度不能快于线性时间。你得到的是二次算法。
这样的事情应该更快(线性时间复杂度)。
public static byte[] doplnMezery(byte[] item, int numberOfSpaces) {
byte[] result = new byte[item.length + numberOfSpaces];
Arrays.fill(result, 0, numberOfSpaces, (byte) 32);
System.arraycopy(item, 0, result, numberOfSpaces, item.length);
return result;
}
答案 1 :(得分:1)
尝试此代码(JUnit测试) - 将 7个空格添加到items
生成items2
数组:
@Test
public void test1() throws Exception
{
byte[] items = new byte[] { 0x01, 0x02, 0x03 };
byte[] items2 = new byte[3 + 7];
System.arraycopy(items, 0, items2, 7, items.length);
Arrays.fill(items2, 0, 7, (byte)' ');
assertArrayEquals(new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x02, 0x03 } , items2);
}