按值字段

时间:2017-06-12 10:01:42

标签: java collections hashmap concurrenthashmap

我有一个Map实现,我必须创建一个查询,使用值名称字段我需要将Key返回给该对象。

一种方法是通过KeySet使用迭代器并检查每个Value,但效率不高。

时间是一个重要因素。

有没有有趣的解决方案/库这样做?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

是肯定的。 使用Bidi地图: - Bidi Map

Download jar

How to use.

实施例: -

BidiMap bidiMap = new DualHashBidiMap( );
bidiMap.put( "il", "Illinois" );
bidiMap.put( "az", "Arizona" );
bidiMap.put( "va", "Virginia" );
// Retrieve the key with a value via the inverse map
String vaAbbreviation = bidiMap.inverseBidiMap( ).get( "Virginia" );

// Retrieve the value from the key
String illinoisName = bidiMap.get( "il" );

使用相同的方法,您只需要实现Map的hascode()equals()合约。 解决方案: -

  1. 我们知道HashCode用于存储在Bucket中。假设hashcode2-D matrix中的行号,并且每行的链接列表为entry[key,value]

  2. 实现hashcode(),这样每个entry[key,value]你就会得到不同的“桶号”(行号)。

  3. 实施equals()方法以检查每个广告素材条目[key,value]中的相等性。

  4. 复杂性: - 如果您将每个entry[key, value]分配到不同的存储分区,则SEARCHINGADDING复杂度将为 o(1)。< / p>

  5. 请参阅以下文档以更好地了解解决方案: - doc1 doc2