Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 展平参差不齐的LinkedHashMap_Java_Arrays_Data Structures_Hashmap - Fatal编程技术网

Java 展平参差不齐的LinkedHashMap

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表示我要跟踪的字节[]类型

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)。我想不是每个人都意识到字节[]是一个对象,这可能是一种解释。。。