0

我有这种方法可以在字节数组的开头添加空格。问题是我不确定这是否是这个任务最快的实现。是否有一些选项可以更快地添加空间?如果是,请在此处添加一些解决方案

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;
}
4

2 回答 2

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;
}
于 2012-05-28T06:47:55.813 回答
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);
}
于 2012-05-28T06:53:54.793 回答