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

コレクションAPIは、オブジェクトのコレクションの処理を容易にする一連のクラスとインターフェースを開発者に提供します。



30
JavaでArrayListよりもLinkedListを使用する場合
私は常に単純に使用するものでした: List<String> names = new ArrayList<>(); 移植性のタイプ名としてインターフェースを使用しているので、このような質問をしたときにコードを書き直すことができます。 いつLinkedList、ArrayListまたはその逆に使用する必要がありますか?

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
Map <Key、Value>を値でソート
私はJavaに比較的慣れていないためMap&lt;Key, Value&gt;、値を並べ替える必要があることがよくあります。 値が一意ではありませんので、私は自分自身が変換を見つけるkeySetにarray、そしてを通じてその配列のソート配列のソートとカスタムコンパレータキーに関連付けられた値でソートすること。 もっと簡単な方法はありますか?

25
ループでオブジェクトを削除するときにConcurrentModificationExceptionを回避して、コレクションを反復処理する
私たちは皆、あなたが次の理由で次のことができないことを知っていますConcurrentModificationException: for (Object i : l) { if (condition(i)) { l.remove(i); } } しかし、これは明らかに機能することもありますが、常に機能するとは限りません。ここにいくつかの特定のコードがあります: public static void main(String[] args) { Collection&lt;Integer&gt; l = new ArrayList&lt;&gt;(); for (int i = 0; i &lt; 10; ++i) { l.add(4); l.add(5); l.add(6); } for (int i : l) { if (i == 5) { …

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

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


15
Java「ダブルブレース初期化」の効率性?
StackаэтотвопросестьответынаStack Overflowнарусском:doubleтотакоеdouble braceинициализация? Javaの隠された機能トップの答えは言及ダブルブレースの初期化をして、非常に魅力的な構文: Set&lt;String&gt; flavors = new HashSet&lt;String&gt;() {{ 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&lt;String&gt; flavors = Set.of("vanilla", "strawberry", "chocolate", "butter pecan"); それは確かに行く方法です。以前のバージョンに行き詰まっている場合は、GoogleコレクションのImmutableSetをご覧ください。






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