我有一个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,这可以解决所有这些问题?
答案 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;
}
}