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]から入手できます。




  • «** 前へ