我必须选择一种数据结构来满足我的需要,下面我解释一下有以下值的条件
abc,def,rty,ytr,dft which all are map to row R1B1 (actully key is combination of R1+B1)
abEERc,dFFFef,rGGty which all are map to row R1B2 (actully key is combination of R1+B2)
KEY VALUE
abc,def,rty,ytr,dft ---> R1B1
abEERc,dFFFef,rGGty ---> R1B2
现在,例如,如果我得到 ytr
那么我将能够检索 R1B1
或者,比方说,我得到值 rGGty
然后我就能够检索 R1B2
现在的情况是,事情是搜索、复杂性和事情必须按顺序进行所花费的时间
例如,它会首先选择第一行来搜索ytr
,它会先与不匹配的abc
匹配,然后必须与def
匹配,它不会再匹配,然后它会与也不会匹配的rty
匹配,最后与ytr
匹配,最后它会找到 key R1B1
类似地,如果需要搜索第二个字符串,比如说rGGty
,那么它将扫描第一行,其中找不到值,然后搜索将继续到第二行,并且在第三个元素的第二行中,它将获取rGGty
作为元素,然后它将检索R1B2
作为值
假设,如果把这个东西放在map中,那么就会对key进行序列搜索,然后只有我们才能找到相应的值
请大家告诉我哪一个是我可以在java中实现的最佳数据结构,在该结构中我必须搜索键项以非常快的时间找到相应的值,这也不会影响性能 ,这种数据结构性能应该很高
请大家多多指教
最佳答案
可以使用 HashMap
在 O(1) 内访问键值对。但是,如果您使用 HashMap<String, String>
那么更新值将会很痛苦,因为字符串是不可变的。这意味着您必须检查所有条目集,如果值匹配则更新它。因此,您可以为该值创建一个辅助类,并让所有键都指向该类的实例。这是一个包含最重要功能的 stub ,我想您可以自己添加其余的功能。
public class MyDataStructure {
private Map<String, MyValue> key_value = new HashMap<String, MyValue>();
private Map<String, MyValue> value_MyValue = new HashMap<String, MyValue>();
public void set(String key, String value) {
MyValue v = value_MyValue.get(value);
if (v == null) { // should rarely happen, could check with containsKey
v = new MyValue(value);
value_MyValue.put(v);
}
key_value.put(key, v);
}
public String get(String key) {
return key_value.get(key).getValue(); // key might not exist
}
public String changeValue(String oldValue, String newValue) {
MyValue v = value_MyValue.remove(oldValue); // oldValue might not exist
v.setValue(newValue);
value_MyValue.put(newValue, v);
// will not work if newValue already exists... then you will have to merge
}
private class MyValue() {
private String value;
public MyValue(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}
关于java - 在java中为以下数据选择完美的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30825564/