Сгладить рваный LinkedHashMap - PullRequest
0 голосов
/ 22 марта 2011

У меня есть LinkedHashMap, где CommonEnum представляет тип байта [], который я хочу отслеживать.

LinkedHashMap<CommonEnum, byte[]> map = new LinkedHashMap<CommonEnum, byte[]>();

Какой самый эффективный способ в Java сделать это непрерывным

byte[]

с тем же порядком (вот почему HashMap связан).

Ответы [ 3 ]

3 голосов
/ 22 марта 2011

Если вы можете использовать LinkedHashMap<CommonEnum, byte[]>, это станет проще, и я понятия не имею, почему вы бы использовали Byte[], поэтому я предполагаю это.

Я не уверен насчет самого эффективного , но вот о двух я думаю:

    1. создать байт [] достаточно большой (либо оценить его, либо рассчитать, добавив размеры)
    2. перебирает значения, используя System.arraycopy для каждого.
    3. Если массив был длинным, используйте Arrays.copyOf, чтобы сократить его.
    1. Создать ByteArrayOutputStream
    2. цикл по значениям, запись каждого байта [] в поток.
    3. получить массив.

Кстати, если значения CommonEnum всегда имеют одинаковый порядок (и вы можете использовать этот порядок в качестве порядка в определении перечисления), вы можете использовать EnumMap вместо этого.

1 голос
/ 22 марта 2011

Я фанат ByteArrayOutputStream - вы можете перебирать записи на карте, и для каждого значения Byte[] перебирать элементы, write() отправляя их в поток.Затем позвоните toByteArray() в конце, чтобы получить плоскую версию.

0 голосов
/ 22 марта 2011

В зависимости от количества элементов и размера самый быстрый способ может заключаться в том, чтобы сначала рассчитать общую длину, создать новый байтовый массив и скопировать значения, используя System.arraycopy. Тем не менее, использование ByteArrayOutputStream также хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...