2012-03-15 54 views
9

我想將一些python代碼轉換爲java並需要設置列表的默認值。我知道默認值,列表大小,我的目標是設置默認值,然後在我的程序中更改它們。在python我只是做這個(創建具有零值10項):如何設置項目清單的默認值?

list = [0]*10 

我試圖做的事:

List<Integer> list1 = Arrays.asList(0*10); // it just multiples 0 by 10. 

這行得工作,我知道我可以做這樣的事情:

for(int i = 0;i<10;i++) 
{ 
    list1.add(0); 
} 

我想知道是否有更好的方法(而不是for循環)?

+0

你可以使用數組而不是列表? – 2012-03-15 19:58:57

+0

@MarkByers它並不重要,但我讀到,列表有更好的表現是大小是固定的,所以這就是爲什麼我去那條路線。它的使用並不是非常重要,但是由於我正在學習,我只是想爲正確的任務學習正確的工具。 – 2012-03-15 20:00:58

+1

@learningJava:不,這是相反的方式 - *數組*具有固定的大小。但是名單一般更易逃脫。 – 2012-03-15 20:02:31

回答

18

Arrays.fill讓你避免循環。

Integer[] integers = new Integer[10]; 
Arrays.fill(integers, 0); 
List<Integer> integerList = Arrays.asList(integers); 
+0

請注意,該列表將是一個*固定*大小 - 你不能添加到它或從中刪除。這可能是也可能不是想要的。 – 2012-03-15 19:59:56

+0

@JonSkeet,很對。我根據需要解釋了這一點,因爲「我知道默認值,列表的大小......」。 – 2012-03-15 20:00:42

+0

這是正確的,它是一個固定的大小,這就是爲什麼我首先選擇列表。我有點困惑,我理解前兩行,你創建了一個包含10個項目的列表,然後使用arrays.fill將其全部設置爲零,爲什麼需要第三行? – 2012-03-15 20:03:31

-1

在Java中,並不是真的。在涉及到這種東西時,Java相對比較冗長,所以你可以做的事情很簡單,除了像你這樣的循環。

+0

正如我們可以看到上面的答案,這是一個虛假陳述 – 2017-06-16 07:10:17

2

就我所知,標準庫沒有內置任何東西。但是,您可以輕鬆地編寫一次這樣的方法,並從您想要的任何地方進行調用。例如:

public static <T> List<T> newArrayList(T value, int size) { 
    List<T> list = new ArrayList<T>(size); 
    for (int i = 0; i < size; i++) { 
     list.add(value); 
    } 
    return list; 
} 

如果您不希望更改列表的大小(即添加或刪除元素),邁克·薩穆埃爾的答案可能是更有效的。另外請注意,如果您使用的是可變類型,你可能不會得到你想要的東西:

List<StringBuilder> list = newArrayList(new StringBuilder(), 10); 
list.get(0).append("Foo"); 
System.out.println(list.get(5)); // Prints "Foo" 

...作爲列表中的每個元素將是同一對象的引用。

3

也許你只是需要一個數組?

int[] array = new int[10]; 

如果您需要動態更改其大小,則需要列表。如果你不需要這個功能,一個數組可能適合你的需求,它會自動將所有的值初始化爲0。

0

你可以試試:

List<Integer> list1 = Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0); 

有10個零。您需要知道編譯時的元素數量,但只有一行。如果您在編譯時不知道元素的數量,那麼您可以使用建議的Arrays.fill()方法。

+2

請不要讓你的代碼的維護者計數爲0。因爲維護人員不能認爲他們與代碼一致,所以評論無能爲力。 – 2012-03-15 20:12:49

+0

我真的很想避免這種情況。我很懶,不喜歡打字。加上我的數據是幾千個零,所以我可能會失去我的鍵盤保修,如果我輸入那麼多:-) – 2012-03-15 20:15:04

+0

是的,這是一個真正的野生少量初始值。我也不喜歡代碼。 – 2012-03-15 20:20:01

0

我會堅持使用for循環。

BTW ...0×10 = 0,所以只是在量輸入你需要的,而不是

ArrayList<Integer> list = new ArrayList<Integer>(10);

+0

'list.size()'將返回0.不是10。 – 2016-09-21 08:50:52

7

Collections.nCopies是你的朋友,如果你需要一個列表,而不是一個數組:如果需要一個可變的列表

List<Integer> list = Collections.nCopies(10, 0); 

,包裝它:

List<Integer> list = new ArrayList<>(Collections.nCopies(10, 0));