2010-02-20 44 views
7

我想創建一個可增長的字節數組。即列表。 在C#中會usally做以下語法Java基本類型的列表泛型語法

List<byte> mylist = new List<byte>(); 

,其中在Java中,這句法不工作,我身邊有GOOGLE上搜索,發現下面的代碼

List myList = new ArrayList(); 

但是這不是我想要的。任何想法,我要去哪裏錯了?

回答

5

使用包裝類Byte

List<Byte> mylist = new ArrayList<Byte>(); 

然後,因爲自動裝箱的,你仍然可以有:

for (byte b : mylist) { 

} 
+1

列表是一個接口,所以你不能新的了。你需要使用一個具體的類來代替,比如ArrayList或LinkedList – 2010-02-20 11:30:41

+0

@Michael Williamson一個錯字,而不是我不知道的;) – Bozho 2010-02-20 11:35:04

+0

感謝Bozho爲我工作。 – 2010-02-20 11:43:40

3

你必須在JRE提供的Byte類。

該類是byte原始類型的相應類。

查看here瞭解原始類型。

你可以這樣做:

List<Byte> myList = new ArrayList<Byte>(); 
byte b = 127; 
myList.add(b); 
b = 0; // resetting 
b = myList.get(0); // => b = 127 again 

正如邁克爾在評論中指出:

List<Byte> myList = new ArrayList<Byte>(); 
Byte b = null; 
myList.add(b); 
byte primitiveByte = myList.get(0); 

結果:

Exception in thread "main" java.lang.NullPointerException 
    at TestPrimitive.main(TestPrimitive.java:12) 
+2

不提供1.4.2的鏈接 – Bozho 2010-02-20 11:29:05

+1

可能值得添加的是,泛型和基元不能很好地一起玩 - 也就是說,不能使用基元作爲類型參數,因此需要使用Byte而不是字節。自動裝箱並不完美 - 一個字節可以爲空,在一個字節不能的情況下,所以試圖將一個字節分配給一個字節可能會導致空指針異常。 – 2010-02-20 11:34:03

+0

@Bozho:他們仍然是Google或Bing上的第一個結果。一個很好的例子,搜索引擎吸吮;-) – Joey 2010-02-20 11:39:33

0

注意使用ArrayList<Byte>來存儲可增長數組的字節可能不是一個好主意,因爲每個字節都被裝箱,這意味着一個新的Byte對象是al位於。所以每個字節的總內存成本是ArrayList +一個字節對象中的一個指針。

這可能更好使用java.io.ByteArrayOutputStream。在那裏,每個字節的內存成本是1個字節。

如果您多描述一下上下文,我們可以提供更好的建議。