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つのスペースを追加します:itemsitems2

@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 に答える