Java 展平参差不齐的LinkedHashMap
我有一个LinkedHashMap,其中CommonEnum表示我要跟踪的字节[]类型Java 展平参差不齐的LinkedHashMap,java,arrays,data-structures,hashmap,Java,Arrays,Data Structures,Hashmap,我有一个LinkedHashMap,其中CommonEnum表示我要跟踪的字节[]类型 LinkedHashMap<CommonEnum, byte[]> map = new LinkedHashMap<CommonEnum, byte[]>(); LinkedHashMap=新建LinkedHashMap(); 在Java中,最有效的方法是什么来将其扁平化为一个连续的过程 字节[] 使用相同的顺序(这就是HashMap被链接的原因)。我是ByteArrayOutpu
LinkedHashMap<CommonEnum, byte[]> map = new LinkedHashMap<CommonEnum, byte[]>();
LinkedHashMap=新建LinkedHashMap();
在Java中,最有效的方法是什么来将其扁平化为一个连续的过程
字节[]
使用相同的顺序(这就是HashMap被链接的原因)。我是
ByteArrayOutputStream
的粉丝——您可以迭代映射中的条目,对于每个Byte[]
值,迭代成员,write()
将它们写入流。然后在最后调用toByteArray()
以获得平面版本。我非常喜欢ByteArrayOutputStream
——您可以遍历映射中的条目,对于每个字节[]
值,遍历成员,将其写入流。然后在最后调用toByteArray()
以获得平面版本。根据元素的数量和大小,最快的方法可能是首先计算总长度,创建一个新的字节数组,然后使用System.arraycopy
复制值。但是,使用ByteArrayOutputStream也很好。根据元素的数量和大小,最快的方法可能是首先计算总长度,创建新的字节数组,然后使用System.arraycopy
复制值。然而,使用ByteArrayOutputStream也很好。如果你能使用LinkedHashMap
,它会变得更容易,我不知道你为什么要使用Byte[]
,所以我假设这一点
我不确定最有效的方法是什么,但这两种方法正是我所想的:
-
- 创建一个足够大的字节[](估计或通过添加大小进行计算)
- 使用
System.arraycopy
循环遍历每个值
- 如果数组太长,请使用
Arrays.copyOf
将其缩短
-
- 创建ByteArrayOutputStream
- 循环遍历这些值,将每个字节[]写入流
- 获取数组
顺便说一下,如果您的CommonEnum值总是具有相同的顺序(并且您可以使用此顺序作为枚举定义中的顺序),那么您可以使用EnumMap
。如果您可以使用LinkedHashMap
,这会变得更容易,我不知道您为什么要使用Byte[]
,因此我假设这一点
我不确定最有效的方法是什么,但这两种方法正是我所想的:
-
- 创建一个足够大的字节[](估计或通过添加大小进行计算)
- 使用
System.arraycopy
循环遍历每个值
- 如果数组太长,请使用
Arrays.copyOf
将其缩短
-
- 创建ByteArrayOutputStream
- 循环遍历这些值,将每个字节[]写入流
- 获取数组
顺便说一下,如果您的CommonEnum值总是具有相同的顺序(并且您可以使用此顺序作为枚举定义中的顺序),那么您可以使用EnumMap
。为什么用字节[]
代替字节[]
?啊。。我不认为你可以将byte[]与泛型一起使用。我的错误你不能将基元类型用作类型参数,但数组类型在Java中是引用类型(甚至基元数组)。为什么你用byte[]
而不是byte[]
?啊。。我不认为您可以将byte[]与泛型一起使用..我的错误您不能将基元类型用作类型参数,但数组类型在Java中是引用类型(甚至基元数组)。绝对是这样做的(+1)。我想并不是每个人都意识到byte[]是一个对象,这可能是一种解释……肯定是这样做的(+1)。我想不是每个人都意识到字节[]是一个对象,这可能是一种解释。。。