Apache Commons Collections BidiMap
1概要
この短い記事では、Apache Commons Collectionsライブラリーの興味深いデータ構造(
BidiMap
)を見ていきます。
BidiMap
は、標準の
Map
インターフェースの上にある対応する値を使用してキーを調べる可能性を追加します。
2依存関係
BidiMap
とその実装を使用するには、プロジェクトに次の依存関係を含める必要があります。 Mavenベースのプロジェクトでは、
pom.xml
に次の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency>
Gradleベースのプロジェクトでは、
build.gradle
ファイルに同じ成果物を追加する必要があります。
compile 'org.apache.commons:commons-collections4:4.1'
この依存関係の最新バージョンはhttps://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22org.apache.commons%22%20AND%20a%3A%22commons-collections4%にあります。 22[Maven Centralで]。
3実装とインスタンス化
BidiMap
自体は、双方向マップに固有の動作を定義する単なるインタフェースです – もちろん、複数の実装が利用可能です。
BidiMap
の実装
では、キーと値の重複
は許可されていないことを理解することが重要です。
BidiMap
が反転されると、重複した値は重複したキーに変換され、マップ規約に違反します。マップには常に一意のキーが必要です。
このインターフェースのさまざまな具体的な実装を見てみましょう。
-
DualHashBidiMap
:この実装は2つの
HashMap
インスタンスを使用して
内部的にBidiMapを実装する
__.
これはエントリの高速検索を提供します
エントリのキーまたは値を使用してただし、2つの例
HashMap
を更新する必要があります
**
DualLinkedHashBidiMap:
この実装は2つの
LinkedHashMapを使用します。
その結果、マップエントリの挿入順序が維持されます。
マップエントリの挿入順序を維持する必要がない場合は、
もっと安価な
DualHashBidiMap
を使うことができます
**
TreeBidiMap:
この実装は効率的であり、
赤黒ツリーの実装
TreeBidiMap
のキーと値は次のとおりです。
の自然順序付けを使用して昇順にソートされることが保証されています。
キーと値
**
TreeMap
の2つのインスタンスを使用する
DualTreeBidiMap
もあります
TreeBidiMap
と同じことを実現するため。
DualTreeBidiMap
は明らかに
TreeBidiMap
よりも高価です
BidiMap
インターフェースは、
java.util.Map
インターフェースを拡張しているため、ドロップインの代わりとして使用できます。具象オブジェクトインスタンスをインスタンス化するために具象実装の引数なしのコンストラクタを使用することができます
_.
_
4ユニークな
BidiMap
メソッド
さまざまな実装について検討したので、インターフェイスに固有のメソッドを見てみましょう。
-
put()
** は、マップに新しいキー値エントリを挿入します。新しいエントリの値が既存のエントリの値と一致する場合、既存のエントリは新しいエントリのために削除されます。
このメソッドは削除された古いエントリを返します。ない場合は
null
を返します。
BidiMap<String, String> map = new DualHashBidiMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
assertEquals(map.size(), 2);
-
inverseBidiMap()
は、
BidiMapのキーと値のペアを反転します。** このメソッドは、キーが値になった新しい
BidiMap
を返します。この操作は、翻訳および辞書アプリケーションで非常に役立ちます。
BidiMap<String, String> rMap = map.inverseBidiMap();
assertTrue(rMap.containsKey("value1") && rMap.containsKey("value2"));
-
removeValue()
は、キーの代わりに値を指定してマップエントリを削除するために使用されます** 。これは、
java.util
パッケージにある
Map
実装に追加されたものです。
map.removeValue("value2");
assertFalse(map.containsKey("key2"));
-
getKey()を使用して
BidiMap
の特定の値にマップされたキーを取得できます。** 指定された値にキーがマップされていない場合、このメソッドは
null__を返します。
assertEquals(map.getKey("value1"), "key1");
5結論
このクイックチュートリアルでは、Apache Commons Collectionsライブラリ、特に
BidiMap
、その実装、および固有のメソッドについて説明しました。
BidiMap
の最もエキサイティングで際立った機能は、値だけでなくキーを使ってエントリを検索して操作できることです。
いつものように、コードスニペットはhttps://github.com/eugenp/tutorials/tree/master/libraries-apache-commons[over on GitHub]から入手できます。
次
”
-
«** 前へ