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

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

8
反復中にコレクションから要素を削除する
私の知る限り、2つのアプローチがあります。 コレクションのコピーを反復処理します 実際のコレクションのイテレーターを使用する 例えば、 List<Foo> fooListCopy = new ArrayList<Foo>(fooList); for(Foo foo : fooListCopy){ // modify actual fooList } そして Iterator<Foo> itr = fooList.iterator(); while(itr.hasNext()){ // modify actual fooList using itr.remove() } あるアプローチを他のアプローチよりも好む理由はありますか(たとえば、読みやすさの単純な理由から最初のアプローチを好む)。

12
Javaでリストの逆のリストビューを取得するにはどうすればよいですか?
(List#sublistリストにサブリストビューを提供するのと同じような方法で)リストのリストビューを反転させたい。この機能を提供する機能はありますか? リストのコピーを作成したり、リストを変更したりしたくありません。 この場合でも、リストに少なくともリバースイテレータを取得できれば十分です。 また、私はこれを自分で実装する方法を知っています。私はちょうどJavaがすでにこのようなものを提供しているかどうかを尋ねています。 デモの実装: static <T> Iterable<T> iterableReverseList(final List<T> l) { return new Iterable<T>() { public Iterator<T> iterator() { return new Iterator<T>() { ListIterator<T> listIter = l.listIterator(l.size()); public boolean hasNext() { return listIter.hasPrevious(); } public T next() { return listIter.previous(); } public void remove() { listIter.remove(); } }; } …

5
Google Guava対Apache Commons [終了]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 私はJavaで双方向のマップ実装を探していて、次の2つのライブラリに出くわしました。 Google Guava(以前の「Googleコレクション」) Apache Commonsコレクション どちらも無料で、私が探していた双方向マップ実装(ApacheのBidiMap、GoogleのBiMap)があり、驚くほどほぼ同じサイズです(Apache 493 kB、Google 499 kB)[ed .: no true true!]すべての点で私にかなり似ています。 どちらを選択する必要がありますか。その理由は何ですか。他に同等の代替案がありますか(無料で、少なくとも双方向マップが必要です)?私は最新のJava SEを使用しているため、Java 5などに人工的に制限する必要はありません。



7
for-eachループとイテレーターのどちらがより効率的ですか?
コレクションをトラバースする最も効率的な方法はどれですか。 List<Integer> a = new ArrayList<Integer>(); for (Integer integer : a) { integer.toString(); } または List<Integer> a = new ArrayList<Integer>(); for (Iterator iterator = a.iterator(); iterator.hasNext();) { Integer integer = (Integer) iterator.next(); integer.toString(); } これはthis、this、this、またはthisの完全な複製ではありませんが、最後の質問に対する答えの1つが近くなりました。これがだまされない理由は、これらのほとんどがget(i)反復子を使用するのではなく、ループ内で呼び出すループを比較しているためです。 メタで示唆されているように、私はこの質問に対する私の答えを投稿します。



8
リストから整数を適切に削除する<整数>
これが私が今遭遇した素晴らしい落とし穴です。整数のリストを考えてみましょう: List&lt;Integer&gt; list = new ArrayList&lt;Integer&gt;(); list.add(5); list.add(6); list.add(7); list.add(1); あなたが実行すると何が起こるかについての教育を受けた推測はありますlist.remove(1)か?どうlist.remove(new Integer(1))ですか?これはいくつかの厄介なバグを引き起こす可能性があります。 整数のリストを処理するときに、remove(int index)指定されたインデックスから要素を削除するとremove(Object o)参照によって要素を削除するを区別する適切な方法は何ですか? ここで考慮すべき主要な点は、@ Nikitaが言及したものです -正確なパラメーターの一致は、オートボクシングよりも優先されます。

10
Kotlinのリストに「追加」、「削除」、「欠けているマップ」などがありませんか?
Javaでは、次のことができます public class TempClass { List&lt;Integer&gt; myList = null; void doSomething() { myList = new ArrayList&lt;&gt;(); myList.add(10); myList.remove(10); } } しかし、以下のようにKotlinに直接書き換えると class TempClass { var myList: List&lt;Int&gt;? = null fun doSomething() { myList = ArrayList&lt;Int&gt;() myList!!.add(10) myList!!.remove(10) } } リストから検索addおよびremove機能しないというエラーが発生しました 私はそれをArrayListにキャストすることを回避しますが、それをキャストする必要があるのは奇妙ですが、Javaではキャストは必要ありません。そして、それは抽象クラスListを持つ目的を無効にします class TempClass { var myList: List&lt;Int&gt;? = null fun …

8
Javaで最後のN個の要素を保持するサイズ制限のキュー
Javaライブラリに関する非常にシンプルで簡単な質問:Queue最大サイズが固定されたを実装する既成のクラスがあります。つまり、常に要素の追加を許可しますが、新しく追加された要素のスペースを収容するためにヘッド要素を静かに削除します。 もちろん、手動で実装するのは簡単です: import java.util.LinkedList; public class LimitedQueue&lt;E&gt; extends LinkedList&lt;E&gt; { private int limit; public LimitedQueue(int limit) { this.limit = limit; } @Override public boolean add(E o) { super.add(o); while (size() &gt; limit) { super.remove(); } return true; } } 私の知る限り、Java stdlibsには標準の実装はありませんが、Apache Commonsなどに実装されている可能性がありますか?
197 collections  queue  java 

17
JSONをマップに変換
このようにJSONコードを変換する最良の方法は何ですか: { "data" : { "field1" : "value1", "field2" : "value2" } } キーが(field1、field2)であり、それらのフィールドの値が(value1、value2)であるJavaマップ内。 何か案は?そのためにJson-libを使用する必要がありますか?自分でパーサーを書いた方がいいですか?


4
標準のKotlinライブラリで利用できるJava 8 Stream.collectの同等のものは何ですか?
Java 8では、Stream.collectコレクションの集約を可能にするものがあります。Kotlinでは、おそらくstdlibの拡張関数のコレクションとして以外は、これは同じ方法で存在しません。しかし、さまざまなユースケースでの同等性が何であるかは明らかではありません。 たとえば、JavaDocCollectorsの上部には Java 8用に記述された例があり、それらをKolinに移植する場合、異なるJDKバージョンではJava 8クラスを使用できないため、異なる方法で記述する必要があります。 Kotlinコレクションの例を示すオンラインのリソースに関しては、それらは通常は取るに足らないものであり、実際に同じ使用例と比較することはできません。Java 8用に文書化されているようなケースに本当に一致する良い例は何Stream.collectですか?リストがあります: 名前をリストに蓄積する 名前をTreeSetに蓄積する 要素を文字列に変換し、コンマで区切って連結します 従業員の給与の合計を計算します 部門別のグループ従業員 部門ごとの給与の合計を計算する 生徒を合格と不合格に分ける 上記のリンクのJavaDocの詳細を使用。 注: この質問は、作者が意図的に作成して回答したものであり(自己回答式の質問)、一般的に尋ねられるKotlinトピックに対する慣用的な回答がSOにあります。また、現在のKotlinには正確ではない、Kotlinのアルファ用に書かれたいくつかの本当に古い回答を明確にするためにも。

11
List <DerivedClass>をList <BaseClass>に変換します
基本クラス/インターフェースから継承できますが、List&lt;&gt; 同じクラス/インターフェースを使用して宣言できないのはなぜですか? interface A { } class B : A { } class C : B { } class Test { static void Main(string[] args) { A a = new C(); // OK List&lt;A&gt; listOfA = new List&lt;C&gt;(); // compiler Error } } 回避策はありますか?

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