我有一个Hashtable类型的Hashtable
我已经加载了几个字符串作为键,其中一个是“ABCD”
但是,稍后当我去查找“ABCD”时,Hashtable返回null而不是关联的对象。此外,键集包含“ABCD”,但对containsKey(“ABCD”)的请求返回false。
这是因为String对象本质上是不同的对象吗?
如果是这样,如果我想将字符串用作键,那么在Hashtable中存储信息的写入方式是什么?
public class Field {
private String name;
private DataType dataType;
public Field(String name, DataType dataType) {
this.name = name;
this.dataType = dataType;
}
public String getName() {
return name;
}
public DataType getDataType() {
return dataType;
}
public String toString() {
return name;
}
}
public class Record {
private Hashtable<String, Data> content;
public Record(Field[] fieldList) {
this.fieldList = fieldList;
content = new Hashtable<String, Data>();
System.out.println(fieldList.length);
for(Field f : fieldList) {
content.put(f.getName(), new Data());
}
}
public void add(String field, String s) {
// ERROR OCCURS HERE IN THIS METHOD !!!
System.out.println(field);
for(String ss : content.keySet()) {
System.out.print(" [ " + ss + " ] ");
}
System.out.println();
System.out.println(content.containsKey(field));
System.out.println(content.get(field));
content.get(field).add(s);
}
}
public class Data {
private Vector<String> lines;
private int index;
public Data() {
lines = new Vector<String>();
index = 0;
}
public void add(String s) {
System.out.println("adding");
lines.add(s);
}
public String nextLine() {
try {
return lines.elementAt(index++);
} catch (ArrayIndexOutOfBoundsException aioobe) {
return null;
}
}
}
答案 0 :(得分:8)
适合我!
import java.util.Hashtable;
public class StrMap {
public static void main(String[] args) {
Hashtable<String,Object> map = new Hashtable<String,Object>();
map.put("ABCD", "value");
System.err.println(map.containsKey("ABCD"));
}
}
哟可能还有其他一些错误。将问题减少到仍然显示问题的最小的完整可编译程序。您可能会立即发现问题。如果你不这样做,至少你会有一个我们可以回答的问题。
(Map
和HashMap
也是如此。如果您使用的是Java 2之前的API,那么Hashtable
非常有用(Java 2现在已经十年了! )。)
答案 1 :(得分:0)
Hashtable是一个Java 1.0数据结构。我想知道你为什么不使用地图?
如果java.lang.String是密钥类型,我会说你被其他东西所吸引,而不发布代码就不可能猜到。
答案 2 :(得分:0)
如果没有SSCCE,很难确定根本原因。
至少,常见的原因是:
Hashtable
。 System.out.println()
要验证。String
实际上处于不同的情况,例如"ABcD"
代替"ABCD"
。String
周围有一些空格,首先需要trim()
。即说(与实际问题无关),我强烈建议您使用改进后的HashMap
代替遗留Hashtable
。 Here's a Sun tutorial about maps
答案 3 :(得分:0)
当字段为“ABCD”时,您还可以发布以下方法得到的确切输出吗?
public void add(String field, String s) {
// ERROR OCCURS HERE IN THIS METHOD !!!
System.out.println(field);
for(String ss : content.keySet()) {
System.out.print(" [ " + ss + " ] ");
}
System.out.println();
System.out.println(content.containsKey(field));
System.out.println(content.get(field));
content.get(field).add(s);
}