Hashtable <string,object =“”>找不到字符串</string,>

时间:2010-01-08 17:08:38

标签: java string hashtable

我有一个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;
        }
    }
}

4 个答案:

答案 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"));
    }
}
哟可能还有其他一些错误。将问题减少到仍然显示问题的最小的完整可编译程序。您可能会立即发现问题。如果你不这样做,至少你会有一个我们可以回答的问题。

MapHashMap也是如此。如果您使用的是Java 2之前的API,那么Hashtable非常有用(Java 2现在已经十年了! )。)

答案 1 :(得分:0)

Hashtable是一个Java 1.0数据结构。我想知道你为什么不使用地图?

如果java.lang.String是密钥类型,我会说你被其他东西所吸引,而不发布代码就不可能猜到。

答案 2 :(得分:0)

如果没有SSCCE,很难确定根本原因。

至少,常见的原因是:

  1. 您没有使用您认为正在使用的HashtableSystem.out.println()要验证。
  2. String实际上处于不同的情况,例如"ABcD"代替"ABCD"
  3. String周围有一些空格,首先需要trim()
  4. 即说(与实际问题无关),我强烈建议您使用改进后的HashMap代替遗留HashtableHere'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);
    }