2011-03-22 48 views
0

我有一个LinkedHashMap,其中CommonEnum代表我想跟踪的一个byte []类型。Flatten Ragged LinkedHashMap

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

什么是Java中最有效的方式压扁成连续

byte[]

具有相同的排序(这就是为什么HashMap的链接)这一点。

+1

为什么你有'Byte []'而不是'byte []'? – 2011-03-22 12:48:44

+0

啊..我不认为你可以使用byte []与泛型..我的错误 – systemoutprintln 2011-03-22 13:04:05

+0

你不能使用基元类型作为类型参数,但数组类型是Java中的引用类型(甚至是基元数组)。 – 2011-03-22 13:36:27

回答

3

如果您可以使用LinkedHashMap<CommonEnum, byte[]>,它变得更容易,我不知道为什么你会使用Byte[],所以我假设这一点。

我不知道最有效,但是这两个是什么,我想:

    1. 创建[]足够大的一个字节(或估计,或通过将计算大小)
    2. 循环遍历值,每个使用System.arraycopy
    3. 如果阵列很长,使用Arrays.copyOf来缩短它。
    1. 通过值创建一个ByteArrayOutputStream
    2. 循环,每个字节[]写到流。
    3. 获取数组。

顺便说一句,如果你的CommonEnum值总是相同的顺序(并且你可以使用这个命令作为枚举定义的顺序),你可以使用一个EnumMap代替。

+0

绝对是这样做的方式(+1)。我想不是每个人都意识到一个字节[]是一个对象,这可能是一个解释... – 2011-03-22 13:02:33

1

我的ByteArrayOutputStream风扇 - 你可以通过地图中的条目进行迭代,并为每个Byte[]值,通过迭代的成员,荷兰国际集团write()他们到流。然后在最后打电话toByteArray()以获得平面版本。

0

根据元素数量和大小,最快的方法可能是首先计算总长度,创建一个新的字节数组,然后使用System.arraycopy复制值。但是,使用ByteArrayOutputStream也不错。