2012-03-15 16 views
9

私はいくつかのpythonコードをjavaに変換しようとしており、リストのデフォルト値を設定する必要があります。私はデフォルト値、リストのサイズを知っています、そして、私の目標はデフォルト値を設定し、後でプログラムを変更することです。アイテムリストのデフォルト値を設定する方法は?

list = [0]*10 

私がやろうとしています:Pythonで私は単にこれは、(ゼロの値を10の項目を作成すること)を行う

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

はそれが仕事doest、私はこのような何かを行うことができます知っています:

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

(forループの代わりに)より良い方法があるのだろうかと思っていましたか?

+0

リストの代わりに配列を使用できますか? –

+0

@ MarkByersそれは本当に重要ではありませんが、私はそのリストがより良いパフォーマンスを持っていることを読んでいます。私が勉強しているからですが、正しい仕事のための正しいツールを学びたいと思っています。 –

+1

@learningJava:いいえ、これはもう一つの方法です*配列*は固定サイズです。しかし、リストは一般的にはより簡潔です。 –

答えて

18

Arrays.fillループを回避できます。

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

そのリストは* fixed *サイズになります。そこから取り除く。それは望むものかもしれないし、そうでないかもしれない。 –

+0

@JonSkeet、かなり正しい。私は、「私はデフォルト値、リストのサイズを知っているから」という理由でそれを解釈しました。 –

+0

これは正しいです、それは私が最初にリストを選ぶ理由であった固定サイズです。私はちょっと混乱しています、私は最初の2行を理解し、10項目を保持するリストを作ってから、配列を使用しました。すべてを0に設定して、なぜ3行目が必要ですか? –

-1

Javaでは、実際にはありません。 Javaは、この種のものになると比較的冗長であるため、あなたが持っているようなループ以外は簡単ではありません。

+0

上記の回答から分かるように、これは偽りの文です –

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ゼロがあります。コンパイル時に要素数を知る必要がありますが、1行しかありません。コンパイル時に要素の数がわからない場合は、推奨されるArrays.fill()アプローチを使用できます。

+2

あなたのコードのメンテナーが0とカウントされないようにしてください。メンテナーがコードと一貫していると仮定することはできないので、コメントは役に立ちません。 –

+0

私は本当にそれを避けようとしていました。私はかなり怠惰で、それほどタイピングするのは好きではありません。私のデータには数千のゼロがあるので、キーボードの保証は無効になるかもしれません。 –

+0

そうですね、これは実際にはより少ない初期値での野生のショットでした。私はコードも好きではありません。 –

0

私はforループを使用します。

...= 0 0 * 10あなたの代わりに、配列のリストが必要な場合は、そのだけではなく、あなたが必要とする量で

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

+0

'list.size()'は0を返します。 –

7

Collections.nCopiesを入力することはあなたの友達です:

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

変更可能なリストが必要な場合ラップ:

List<Integer> list = new ArrayList<>(Collections.nCopies(10, 0)); 
関連する問題