java - 在java中为以下数据选择完美的数据结构

标签 java data-structures

我必须选择一种数据结构来满足我的需要,下面我解释一下有以下值的条件

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/

相关文章:

java - 如何从 Java 中的列表集中删除重复项

java - 如何根据自定义顺序对 java 列表进行排序

java - 执行 phonegap 命令 cordova build 时出错

c - 交换链表中的节点

java - 在java中存储给定键的数组

C++基数排序算法

data-structures - 非二叉树高度

java - 无法将在线mysql数据库连接到java应用程序

java - 查找存储在数组列表中的对象的平均值的最佳方法是什么?

c++ - 在 block 之间存在间隙的 block 中存在键的情况下使用什么数据结构?