2010-02-28 27 views
5

Java中可以這樣做嗎?也許我使用錯誤的語法?Java中的ArrayList和索引器

ArrayList<Integer> iAL = new ArrayList<Integer>(); 
iAL.addAll(Arrays.asList(new Integer[] {1, 2, 3, 4, 5 })); 

for (int i = 0; i < iAL.size(); ++i) { 
    System.out.println(iAL[i]); //<-------- HERE IS THE PROBLEM 
} 

此外,有可能的是看到C#做這樣的事情

iAL.addAll(new int[] {1, 2, 3, 4, 5}); 

感謝

回答

10

嘗試System.out.println(iAL.get(i));。因爲它是一個List,不array

+2

所以在Java中列出不能使用索引?可能它與Java不支持運算符重載有關? – 2010-02-28 15:51:01

+3

是的,你是對的,沒有索引器,也沒有像這樣的其他東西:( – 2010-02-28 16:07:30

+0

Java不支持運算符重載,所以除了數組以外,不可能使用索引運算符([]) – Thirler 2010-02-28 17:23:59

4
ArrayList<Integer> iAL = new ArrayList<Integer>(); 
iAL.addAll(Arrays.asList(new Integer[] {1, 2, 3, 4, 5 })); 

for (int i = 0; i < iAL.size(); ++i) { 
    System.out.println(iAL.get(i)); 
} 

AFAIK

iAL.addAll(Arrays.asList(new Integer[] {1, 2, 3, 4, 5 })); //這是最短的解決方案

+4

Arrays.asList ()接受可變參數,所以它可以更短。 – Carl 2010-02-28 16:39:20

+0

現在有趣。 – 2010-02-28 16:51:55

+0

此外,如果你只是要立即添加這些元素,使用複製構造函數可以進一步縮短事情。 – Carl 2010-02-28 17:05:49

3

另外,我想補充你的代碼和其它兩個音符:

例如,從其他的答案結合幾個有用的建議

List<Integer> list = new ArrayList<Integer>(); 
list.addAll(Arrays.asList(1, 2, 3, 4, 5)); 

for (Integer i : list) { 
    System.out.println(i); 
} 

附錄:中coding to the interface問題是有趣的,Carl的評論是中肯的特別。使用接口類型List可以最大限度地減少您使用特定實施的責任。如果需要,您可以稍後切換到任何class that implements List

+0

我沒有得到你的第二點(編碼到接口),這與它有什麼關係? – 2010-02-28 16:54:20

+0

將iAL聲明爲List而不是ArrayList。除非你打算在內部使用一些尺寸管理方法ArrayList,這可能是一個好主意。 – Carl 2010-02-28 17:03:01

4

此外,是否有可能像做

iAL.addAll(new int[] {1, 2, 3, 4, 5}); 

足夠關閉:

iAL.addAll(Arrays.asList(1, 2, 3, 4, 5)); 

無需在代碼中new Integer[]

3

不,您必須使用.get(i); [i]僅適用於數組。但是,如果你不需要索引變量,for-each語法更可取(按照垃圾回答)。

對於第二個,如果不調整名單(它仍然是優良變異個體元素),這將是完全合理的做到以下幾點:

List<Integer> iAL = Arrays.asList(1, 2, 3, 4, 5); 

注意,那Arrays.asList()接受varargs參數,所以沒有理由顯式構造數組。

如果你想有一個可調整大小的列表,下面是可能的最短:

List<Integer> iAL = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5)); 
2

我將重構整個代碼:

List<Integer> iAL = Arrays.asList(1, 2, 3, 4, 5); 

for (int i : iAL) { 
    System.out.println(i); 
}