2011-03-22 47 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也不錯。