展平衣衫褴褛的LinkedHashMap

时间:2011-03-22 12:45:00

标签: java arrays data-structures hashmap

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

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

Java中最有效的方法是将其变为连续的

byte[]

具有相同的排序(这就是HashMap链接的原因)。

3 个答案:

答案 0 :(得分:3)

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

我不确定效率最高的,但这两个是我的想法:

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

顺便说一句,如果您的CommonEnum值始终具有相同的顺序(并且您可以将此顺序用作枚举定义中的顺序),则可以改为使用EnumMap

答案 1 :(得分:1)

我是ByteArrayOutputStream的粉丝 - 您可以遍历地图中的条目,并为每个Byte[]值迭代成员,write()将它们转换为流。然后在最后调用toByteArray()以获得平面版本。

答案 2 :(得分:0)

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