在TreeMap中搜索(Java)

Kro*_*nen 1 java treemap

我需要在地图地图中搜索并返回此元素所属的键.我认为这个实现很慢,你能帮我优化一下吗?我需要使用TreeSet,我不能使用contains因为他们使用compareTo,而equals/compareTo对是以不兼容的方式实现的,我无法改变它.(抱歉,我的英文不好)

Map<Key, Map<SubKey, Set<Element>>> m = new TreeSet();

public String getKeys(Element element) { 
 for(Entry<Key, Map<SubKey, Set<Element>>> e : m.entrySet()) {
  mapSubKey = e.getValue();
  for(Entry<SubKey, Set<Element>> e2 : mapSubKey.entrySet()) {
   setElements = e2.getValue();
   for(Element elem : setElements)
    if(elem.equals(element)) return "Key: " + e.getKey() + " SubKey: " + e2.getKey();
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

eri*_*son 6

这里的问题是键和值是向后的.

地图允许人们有效地找到一个值(这将是KeySubKey)与按键相关联(Element在本示例中).

倒退很慢.

有一些双向地图实现,比如Google Collections BiMap,它支持更快的双向访问 - 但这意味着要替换TreeMap.否则,维护两个地图,每个方向一个.