我必须根据我的需要选择一种数据结构,我在下面解释以下值的条件
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
现在的情况是,重要的是搜索、复杂性和事情按顺序进行所需的时间
例如,它将首先选择要搜索的第一行,它将首先与不匹配的abc
匹配,然后必须与def
匹配,然后再与不匹配的rty
匹配,最后与ytr
匹配,最后找到键R1B1
类似地,如果需要搜索第二个字符串,比如说rGGty
,那么它将扫描第一行,在其中它将找不到值,然后搜索将继续到第二行,并且在第三个元素的第二行,它将获得rGGty
作为元素,然后将R1B2
作为值检索
比方说,如果把这个东西放在地图上,那么序列搜索将在键上进行,然后只有我们才能找到相应的值
各位朋友,请告诉我,哪种数据结构是我用java实现的最好的数据结构,我必须在非常快的时间内搜索关键字项以找到相应的值,这也不会影响性能,这种数据结构的性能应该非常高
请忠告乡亲们
我认为最好保持简单,直到糟糕的性能表明需要某种改进。即使许多映射值是同一个字符串,这也应该可以,因为Java在堆中只存储一个副本。如果映射到单个字符串的键集变得非常大,则可以通过执行两次查找来提高性能——第一次是确定集合成员身份,第二次是检索与集合关联的键的值。这很容易实现。目前,这里有一个直接的方法:
import java.util.*;
public class HashMapDemo {
static HashMap<String, String> map = new HashMap<String, String>();
public static void lookup(String key, String value) {
if (map.get(key) == value) {
System.out.println(key + " lookup ok");
} else {
System.out.println(key + " lookup produced" + map.get(key));
}
}
public static void main(String[] args) {
// requirements:
// abc,def,rty,ytr,dft ---> R1B1
// abEERc,dFFFef,rGGty ---> abEERc
Set<String> kset1 = new HashSet<String>(Arrays.asList("abc", "def",
"rty", "ytr", "dft"));
Set<String> kset2 = new HashSet<String>(Arrays.asList("abEERc",
"dFFFef", "rGGty"));
for (String s : kset1) {
map.put(s, "R1B1");
}
for (String s : kset2) {
map.put(s, "abEERc");
}
// testing value lookup with key
for (String s : kset1) {
lookup(s, "R1B1");
}
// prints:
// abc lookup ok
// dft lookup ok
// def lookup ok
// rty lookup ok
// ytr lookup ok
for (String s : kset2) {
lookup(s, "abEERc");
}
// prints:
// rGGty lookup ok
// abEERc lookup ok
// dFFFef lookup ok
// change key "R1B1" to "XYZ"
for (String s : kset1) {
map.put(s, "XYZ");
}
// test the change
for (String s : kset1) {
lookup(s, "XYZ");
}
// prints:
// abc lookup ok
// dft lookup ok
// def lookup ok
// rty lookup ok
// ytr lookup ok
}
}
可以使用HashMap
在O(1)中访问键值对。但是如果使用HashMap
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;
}
}
}
我有一张地图,如下图所示,其中有一个键,值的类型为: 我想在之前的地图上再添加一个地图,这样就有一个键,它的值就是上面的地图。这是正确的数据结构吗?我们如何实现它? 我想要像下面这样的东西 如上所示,仅向映射引入了一个新键,其值为上一个映射。 所以它就像一张
问题内容: 我想在进行Web服务调用之前检查数据库中是否已记录的记录。 这是我想像的查询形式,我似乎无法弄清楚语法。 有没有办法做到这一点?这样的查询叫什么? 我想将ID的列表传递给mysql,并希望它吐出数据库中尚未存在的ID? 问题答案: 为了确认我已正确理解,您想传递一个数字列表,并查看现有表中 不 存在哪些数字?有效: 您似乎可以随时建立此查询,在这种情况下,可以通过将上面的代码更改为 尽
选择以data-xxx开头的完整属性,就像这个例子:data-a=and data-b=and data-c=不像这个例子:class=and style=https://i.stack.imgur.com/TVtle.png
问题内容: 我有以下数据: 如何在Postgres中编写SQL语句以选择此数据为多维数组,即: 我以前在Postgres中已经见过这种数组的用法,但是不知道如何从表中选择数据到这种数组格式。 假设这里所有列都是。 问题答案: 您不能用于生成多维数组,至少不能用于或更高版本。 (但是即将发布的Postgres 9.5附带了该罐的新变体!) 您从@Matt Ball的查询中得到的是一个记录数组()。
问题内容: 我正在建立一个网站来学习编码,并且正在尝试建立一个工具,用户单击一个选择/下拉列表,其中包含从数据库 cat 提取的某些类别名称,然后另一个选择与从数据库 subcat 提取的子类别名称一起出现。这几乎与Yelp的(向下分类)完全一样,就像Yelp的(向下分类)一样。 我还做了一个图: 我已经有一个从 cat 数据库中提取的类别下拉列表: 我有一个从subcat数据库中提取的subca
问题内容: 我有一张桌子,上面有我所有顾客购买的东西。我想选择上周(从周日开始的一周)中的所有条目。 我已经试过了: 但是我得到了上周的数据,包括本周的数据,我只想要上周的数据。 如何只获取上周的数据? 问题答案: 此条件将返回上周日至周六的记录: 有一个例子: 在对@ d456的回答中: 在间隔的两端不使用星期日的午夜吗? 没错,包括间隔两端的周日午夜。要在间隔结束时排除周日的午夜,必须使用运算