タグ付けされた質問 「initialization」

30
1行でのArrayListの初期化
テスト用にオプションのリストを作成したいと思いました。最初に、私はこれをしました: ArrayList<String> places = new ArrayList<String>(); places.add("Buenos Aires"); places.add("Córdoba"); places.add("La Plata"); 次に、コードを次のようにリファクタリングしました。 ArrayList<String> places = new ArrayList<String>( Arrays.asList("Buenos Aires", "Córdoba", "La Plata")); これを行うより良い方法はありますか?


30
静的マップをどのように初期化できますか?
MapJavaでstaticをどのように初期化しますか? 方法1:静的初期化子 方法2:インスタンス初期化子(匿名サブクラス)またはその他のメソッド? それぞれの長所と短所は何ですか? 2つの方法を示す例を次に示します。 import java.util.HashMap; import java.util.Map; public class Test { private static final Map<Integer, String> myMap = new HashMap<>(); static { myMap.put(1, "one"); myMap.put(2, "two"); } private static final Map<Integer, String> myMap2 = new HashMap<>(){ { put(1, "one"); put(2, "two"); } }; }

12
(文字どおりに)HashMapを直接初期化する方法は?
このようなJava HashMapを初期化する方法はありますか?: Map<String,String> test = new HashMap<String, String>{"test":"test","test":"test"}; 正しい構文は何でしょうか?これについては何も見つかりませんでした。これは可能ですか?変更することなく、マップの作成時に事前にわかっている「最終/静的」値をマップに配置するための最短/最速の方法を探しています。


15
Java「ダブルブレース初期化」の効率性?
StackаэтотвопросестьответынаStack Overflowнарусском:doubleтотакоеdouble braceинициализация? Javaの隠された機能トップの答えは言及ダブルブレースの初期化をして、非常に魅力的な構文: Set<String> flavors = new HashSet<String>() {{ add("vanilla"); add("strawberry"); add("chocolate"); add("butter pecan"); }}; このイディオムは、インスタンスの初期化子だけを含む匿名の内部クラスを作成します。これは、「包含スコープ内の[...]メソッドを使用できます」。 主な質問:これは想像以上に非効率ですか?その使用を1回限りの初期化に限定する必要がありますか?(そしてもちろん自慢して見せます!) 2番目の質問:新しいHashSetは、インスタンス初期化子で使用される「this」である必要があります...誰でもメカニズムに光を当てることができますか? 3番目の質問:このイディオムは、量産コードで使用するにはあいまいすぎますか? 概要:非常に良い答えです。皆さんに感謝します。質問(3)で、人々は構文が明確であるべきだと感じました(ただし、コードに慣れていない開発者にコードが渡される場合は特に、時々コメントをお勧めします)。 質問(1)では、生成されたコードはすぐに実行されます。余分な.classファイルが原因でjarファイルが乱雑になり、プログラムの起動がわずかに遅くなります(それを測定してくれた@coobirdに感謝します)。@Thiloは、ガベージコレクションが影響を受ける可能性があり、余分にロードされたクラスのメモリコストが場合によっては要因になる可能性があることを指摘しました。 質問(2)は私にとって最も興味深いものでした。答えを理解すると、DBIで起こっていることは、匿名の内部クラスがnew演算子によって構築されるオブジェクトのクラスを拡張しているため、構築されるインスタンスを参照する「this」値を持っていることです。とてもきちんとしています。 全体として、DBIは知的好奇心のようなものとして私を襲います。Coobirdなどは、Arrays.asList、varargsメソッド、Googleコレクション、および提案されたJava 7コレクションリテラルで同じ効果を達成できると指摘しています。Scala、JRuby、Groovyなどの新しいJVM言語も、リストの作成に簡潔な表記を提供し、Javaとうまく相互運用できます。DBIがクラスパスを混乱させ、クラスの読み込みを少し遅くし、コードを少しあいまいにすると、おそらく私はそれを避けます。しかし、私はこれをSCJPを取得したばかりの友人に頼み、Javaのセマンティクスについて素朴な冗談を愛するつもりです。;-) みんな、ありがとう! 2017年7月:Baeldung は二重ブレースの初期化の良い要約を持ち、アンチパターンと見なします。 2017年12月:@Basil Bourqueは、新しいJava 9では次のように言うことができると述べています。 Set<String> flavors = Set.of("vanilla", "strawberry", "chocolate", "butter pecan"); それは確かに行く方法です。以前のバージョンに行き詰まっている場合は、GoogleコレクションのImmutableSetをご覧ください。


29
ハードコードされた要素でstd :: vectorを初期化する最も簡単な方法は何ですか?
配列を作成して、次のように初期化できます。 int a[] = {10, 20, 30}; std::vector同様にエレガントなを作成して初期化するにはどうすればよいですか? 私が知る最良の方法は: std::vector<int> ints; ints.push_back(10); ints.push_back(20); ints.push_back(30); もっと良い方法はありますか?

17
C ++でプライベート静的メンバーを初期化する方法は?
C ++でプライベートな静的データメンバーを初期化する最良の方法は何ですか?ヘッダーファイルでこれを試しましたが、奇妙なリンカーエラーが発生します。 class foo { private: static int i; }; int foo::i = 0; これは、クラスの外部からプライベートメンバーを初期化できないためだと思います。これを行うための最良の方法は何ですか?

14
Cプログラミング言語標準に従って構造体を初期化する方法
宣言と初期化で分割されたstruct要素を初期化したい。これは私が持っているものです: typedef struct MY_TYPE { bool flag; short int value; double stuff; } MY_TYPE; void function(void) { MY_TYPE a; ... a = { true, 15, 0.123 } } これはMY_TYPE、Cプログラミング言語標準(C89、C90、C99、C11など)に従ってローカル変数を宣言および初期化する方法ですか?それとも、もっと良い、または少なくとも機能しているものはありますか? 更新静的な初期化要素が必要になり、必要に応じてすべてのサブ要素を設定しました。
466 c  struct  initialization 

10
Javaで配列を初期化する方法は?
私はこのような配列を初期化しています: public class Array { int data[] = new int[10]; /** Creates a new instance of Array */ public Array() { data[10] = {10,20,30,40,50,60,71,80,90,91}; } } NetBeansは次の行でエラーを示しています。 data[10] = {10,20,30,40,50,60,71,80,90,91}; どうすれば問題を解決できますか?



25
ループの前またはループで変数を宣言することの違いは?
一般に、ループ内で繰り返し実行するのではなく、ループの前にスローアウェイ変数を宣言すると、(パフォーマンスの)違いが出るのかといつも疑問に思っていました。(かなり無意味な) Javaでの例: a)ループ前の宣言: double intermediateResult; for(int i=0; i < 1000; i++){ intermediateResult = i; System.out.println(intermediateResult); } b)ループ内で(繰り返し)宣言: for(int i=0; i < 1000; i++){ double intermediateResult = i; System.out.println(intermediateResult); } どちらが、より良いですかB? 変数宣言を繰り返すと(例b)、理論上はオーバーヘッドが増えると思いますが、コンパイラーは十分にスマートであるため、問題ではありません。例bには、よりコンパクトで、変数のスコープをそれが使用される場所に制限するという利点があります。それでも、例aに従ってコーディングする傾向があります。 編集:私は特にJavaのケースに興味があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.