基于索引从LinkedHashMap HashMap获取

时间:2014-09-17 09:52:29

标签: java

我有一个LinkedHashMap<String, String>,其中包含一些预先填充的数据。现在我有一个String值,它与上面LinkedHashMap中的一个键匹配。如何检索上述匹配的下一个键?

示例:

LinkedHashMap hm = new LinkedHashMap();
hm.put("a",1);
hm.put("b",2);
hm.put("c",3);
hm.put("d",4);
hm.put("e",5);

现在我有String,说&#34; d&#34; 。如果我必须检索&#34; e&#34;的最佳方法是什么?从上面Map

我找到的一种方法是将地图密钥转换为LinkedHashSet。现在迭代Set。比较该值并获取下一个值。但是,有没有可用的API,这可以解决所有这些问题?

2 个答案:

答案 0 :(得分:0)

据我所知,LinkedHashMap中的O(N)无法获得“{@ 1}}之后的”给定键之后的下一个条目。“

现在,如果您愿意创建自己的类版本(例如通过复制代码并对其进行修改),那么您可以将其实现为O(1)操作。你甚至可以将它作为LinkedHashMap的子类来实现......但是我怀疑你会因为某些相关的方法和字段无法从子类(在不同的包中)访问而受到阻碍

答案 1 :(得分:0)

我相信没有直接的方法可以做到,但你可以实现一个满足你需求的实用方法:

public class IndexedMap
{
  public static void main(String[] args)
  {
    LinkedHashMap hm = new LinkedHashMap();
    hm.put("a",1);
    hm.put("b",2);
    hm.put("c",3);
    hm.put("d",4);
    hm.put("e",5);
    System.out.println(getNextItem(hm, "d"));
  }

  public static Object getNextItem(LinkedHashMap<String, String> hMap, String item){

    int index = 0;
    List<String> keys = new ArrayList<String>(hMap.keySet());
    for (String key : keys)
    {
      if (item.equals(key))
        break;

      index++;
    }
    return (index < keys.size() - 1) ? hMap.values().toArray()[++index] : 0;
  }

}