java是一种获取键与条件匹配的所有映射值的有效方法
我在一个可索引的数据结构中有以下映射Map<IndexDerivedKey, Collection<Data<D>>> indexedData
IndexDerivedKey
符合Index
,索引由键和相应的值组成。这些键用于从可索引数据结构中的元素中提取值
例如,有一个索引,它由键firstName
和lastName
组成,我们使用这个索引从对象中提取值,这些对象具有这些属性,这个操作会为每个对象生成一个IndexDerivedKey
该IndexDerivedKey
包含从上述键到其各自值的映射,并用于将对象存储在我前面提到的映射indexedData
中。映射值是一种集合类型,因为多个对象可能相等(相对于索引)
问题
如何使用firstName = "John"
提取所有对象,从而忽略lastName
的值。显然,我可以迭代所有键并检查O(n)
中firstName
的值
但是由于IndexDerivedKey
{firstName = "John"}
是所有其他具有firstName = "John"
的键的子集,例如{firstName = "John", lastName = "Smith"}
,我认为必须有一种更有效的方法。也许是利用TreeSet
一,
public IndexDerivedKeyImpl(Index index, Map<String, String> keyValues)
{
this.keyValues = keyValues;
this.index = index;
for (String key : keyValues.keySet())
if (!index.supportsKey(key))
throw new IndexKeyMismatchException(key, index);
}
二,
// in data.Index.index(Indexable)
@Override
public IndexDerivedKey index(Indexable data)
{
Map<String, String> keyValues = new HashMap<String, String>();
IndexDerivedKey key = new IndexDerivedKeyImpl(this, keyValues);
for (String k : keys)
{
String value = data.get(k);
if (value != null)
keyValues.put(k, value);
}
return key;
}
# 1 楼答案
如果要使用其他密钥访问
Map
,最好使用其他Map
:其中键是名字
# 2 楼答案
如果搜索始终按特定顺序进行,则创建一个具有可比较、和等于的键类
然后使用
SortedMap
,如TreeMap
。这也是可导航的。例如,您可以使用subMap(fromKey, toKey)