私はちょうどArrayListMultimap
とLinkedListMultimap
のjavadocを読んでいたので、それらの使い方を理解しました。そして、私は両方のサポートが重複するキーと値のペアを知っていました。私が間違っている場合は私を修正してください)。しかし、私はそれらの違いを理解していません。両方とも、重複するキー値のペアを格納するために使用されます。それらが実装で異なるのは唯一の部分、つまりArrayListMultimap
は配列として実装され、LinkedListMultimap
はLinkedListとして実装されていますか?また、パフォーマンスがどのように異なるのでしょうか?私はたくさんの質問をしていることは分かっていますが、私は本当にこの答えがどこにあるのか分かりません。ArrayListMultimapとLinkedListMultimapの違いは?
答えて
これはドキュメント内にあり、コード内にあります。基本的には、既に見た違い(List
実装の選択)のほかに、異なるMap
の実装も使用します。だから、:
ArrayListMultimap
はマップとentries()
、asMap().keySet()
またはasMap.entrySet()
などの方法の反復順序が定義されていないことを意味ArrayList
CORコレクション、ためHashMap
を使用しています。それは平凡で簡単なListMultimap
の実装であり、これで始めるべきです。注文はすべてのキーと値 ペアを含むリンクリストを使用して維持されている:
LinkedListMultimap
は、上記の方法の反復秩序を維持するために収集し、専門的なデータ構造のためのLinkedList
(カスタムリンクリスト)を使用しています。さらに、 の「兄弟」の一連の独立したリンクリストは、それぞれ特定のキーの値を含んでおり、 を使用して、ValueForKeyIteratorを一定の時間内に実装します。さらにそれが行動様「リンクリスト」を維持するために、いくつかの他の構造を使用しています。
private transient Node<K, V> head; // the head for all keys private transient Node<K, V> tail; // the tail for all keys private transient Multiset<K> keyCount; // the number of values for each key private transient Map<K, Node<K, V>> keyToKeyHead; // the head for a given key private transient Map<K, Node<K, V>> keyToKeyTail; // the tail for a given key
また、メモリフットプリントは、これらのMultimap
の実装に使用されるバッキングコレクションの意味である - see this comparision(最新の100%ではない可能性があります)。
、私はキーの定義された繰り返し順序を持つListMultimap
、効率的な可変を必要とするとき、私は(v16.0以降グアバであるMultimapBuilder
で作成した、)「カスタム」ListMultimap
を使用します。
ListMultimap<String, Integer> treeListMultimap =
MultimapBuilder.linkedHashKeys().arrayListValues().build();
v16.0は、カスタム
Multimap
Sを作成する前
は(Multimaps.newListMultimap
を使用して)より冗長だった:
/**
* Creates {@link ListMultimap} preserving insertion order of keys and values
* (it's backed by {@link LinkedHashMap} and {@link ArrayList}).
*/
public static <K, V> ListMultimap<K, V> newLinkedArrayListMultimap() {
return Multimaps.newListMultimap(
Maps.<K, Collection<V>>newLinkedHashMap(),
new Supplier<List<V>>() {
@Override
public List<V> get() {
return Lists.newArrayList();
}
});
}
ありがとう!それは本当に役立ちます。 – TheRookierLearner
すばらしい答え! – ycomp
- 1. ArrayListMultimapキーを取得する
- 2. ArrayListMultimap Endpointsフレームワークを使用しているときにサーバを起動する際の例外 - 1.9.56
- 3. httpとデフォルトのservemuxの違いは?この違いは何
- 4. CSSのプロパティの違いは、Firefox 3.1と3.5の違いは?
- 5. PHPの::と - の違いは?
- 6. Scalaの&と&&の違いは?
- 7. _declspecと__declspecの違いは?
- 8. Liferay:DLFileEntryLocalServiceUtilとDLAppLocalServiceUtilの違いは?
- 9. オブジェクトとハッシュの違いは?
- 10. hash_mapとunordered_mapの違いは?
- 11. smtpClient.send()とsmtpClient.SendAsync()の違いは?
- 12. MemcachedとHadoopの違いは?
- 13. .tagとタグの違いは
- 14. requireとremote.requireの違いは?
- 15. UseCookieAuthenticationとUseIdentityの違いは?
- 16. javax.sqlとjava.sqlの違いは?
- 17. NSURLConnectionとNSUrlSessionの違いは?
- 18. SPList.ContentTypesEnabledとSPList.AllowContentTypesの違いは?
- 19. データマッパーパターンとリポジトリパターンの違いは?
- 20. os.getenvとos.environ.getの違いは?
- 21. クラッシュダンプとハングダンプの違いは?
- 22. OnSaveInstanceとOnRetainNonConfigurationInstanceの違いは?
- 23. クライアントとサーバーピアの違いは?
- 24. MessageBusとServiceBusの違いは?
- 25. response.endとresponse.sendの違いは?
- 26. `tf.nn.batch_normalization`と` tf.nn.fused_batch_norm`の違いは?
- 27. スパークスタンドアロンとローカルモードの違いは?
- 28. Indexeddb:onsuccessとoncompleteの違いは?
- 29. leftAnchorとleadingAnchorの違いは?
- 30. objectForKeyとvalueForKeyの違いは?
誰かが 'LinkedListMultimap'が便利な場合(' ArrayListMultimap'と比べて)の良い例はありますか? _私がコードを意味するわけではありません - ただの状況_ – ycomp