我需要一个类似字典的数据结构来存储信息,如下所示:
key [value 1] [value 2] ...
我需要能够通过提供密钥和我想要的值(值的数量是常数)来查找给定值。哈希表是我想到的第一件事,但我认为它不能用于多个值。有没有办法用单个数据结构执行此操作,而不是将每个键值对拆分为单独的列表(或哈希表)?此外,我宁愿不使用多维数组,因为事先不知道条目数。感谢
答案 0 :(得分:1)
我不确定您对值列表的意思,并查找给定值。这基本上是名称 - 值对的键控列表吗?或者您想按索引指定值?
如果是后者,你可以使用包含ArrayLists的HashMap - 我假设这些值是String,如果键也是String,它看起来像这样:
HashMap<String, ArrayList<String>> hkansDictionary = new HashMap<String, ArrayList<String>>();
public String getValue (String key, int valueIdx) {
ArrayList<String> valueSet = hkansDictionary.get(key);
return valueSet.get(valueIdx);
}
如果是前者,您可以使用包含HashMaps的HashMap。这看起来更像是这样:
HashMap<String, HashMap<String, String>> hkansDictionary
= new HashMap<String, HashMap<String, String>>();
----
public String getValue (String key, String name) {
HashMap<String, String> valueSet = hkansDictionary.get(key);
return valueSet.get(name);
}
答案 1 :(得分:0)
您可以创建一个包含要查找的两个键值的类,实现equals()和hashcode()以检查/组合对基础值的调用,并使用此新类作为Map的键。
答案 2 :(得分:0)
我会用
Map<Key,ArrayList<String>> map = new HashMap<Key,ArrayList<String>>
您将Key定义为
public class Key{
private String key;
private String value;
//getters,setters,constructor
//implement equals and hashcode and tostring
}
然后你可以做
Key myKey = new Key("value","key");
map.get(myKey);
将返回N个项目列表
答案 3 :(得分:0)
您可以通过首先声明它来创建多维数组,然后创建一个方法以确保在put之前初始化新的值键。此示例使用带有嵌入式列表的地图,但您可以使用地图地图或任何您想要的地图。
即,您必须定义自己的 put 方法来处理新值初始化 ,如下所示:
private static Map<String, List<USHCommandMap>> uSHCommandMaps = new HashMap<String, List<USHCommandMap>>();
public void putMemory() {
if (!uSHCommandMaps.containsKey(getuAtom().getUAtomTypeName()))
uSHCommandMaps.put(getuAtom().getUAtomTypeName(), new ArrayList<USHCommandMap>());
uSHCommandMaps.get(getuAtom().getUAtomTypeName()).add(this);
}