【问题标题】:How To Access The Value in HashTable如何访问 HashTable 中的值
【发布时间】:2014-10-26 21:07:50
【问题描述】:

我想访问哈希表中的值,但在我的代码中有一个异常。我想访问hastable中(KEY,VALUE)中另一个类的构造函数值这是我的类的代码

public class StudentReg {   
    public String RegNo,Program ,FName;

    StudentReg(int Roll , String Program, String FName)
    {
        this.RegNo = " Fall2k14_ "  + Roll +  " " + Program;
        this.FName = FName;
        this.Program = Program;

    }

现在我使用了一个哈希表,我想在其中使用迭代器访问 hastable 的值这是我的主类的代码我已经创建了一个哈希表对象 T 并输入了键和值集和获取迭代器中的值

public static void main(String[] args){
    Hashtable T = new Hashtable();

    T.put("Ahmed", new StudentReg(123,"BS(CS)","Murtaza"));
    T.put("Fahad", new StudentReg(456,"BE(EE)","...."));
    T.put("Alan", new StudentReg(769,"BBA","Rashee"));
    Set set =T.keySet(); // get set-view of keys
              // get iterator
    Iterator itr = set.iterator();
    while(itr.hasNext()) {
       StudentReg  S3 = (StudentReg) itr.next();
       System.out.println(S3 + ": " +T.get(S3.RegNo+""+S3.Program+""+S3.FName));

 } 

此时System.out.println(S3 + ": " +T.get(S3.RegNo+""+S3.Program+""+S3.FName));我想访问在 StudentReg() 的构造函数中传递的值; 但我无法做到这一点

【问题讨论】:

  • 使用 Bare Collections 有什么意义吗?添加 以便避免强制转换迭代器。
  • 你收到什么样的异常?将异常消息粘贴到您的问题中。
  • java.lang.ClassCastException
  • 它显示的是地址而不是数据 Fahad: hashtable.StudentReg@15db9742 Alan: hashtable.StudentReg@6d06d69c Ahmed: hashtable.StudentReg@7852e922

标签: java hashtable


【解决方案1】:

您正在迭代您的键,这些键是字符串。如果要迭代 StudentReg 类的所有对象,则要迭代 values()

我强烈建议将类型参数添加到集合中。这样您的代码将无法编译,您会立即看到问题所在。

Hashtable<String, StudentReg> T
     = new Hashtable<String, StudentReg>();

或者如果使用 java 7 或更新版本

Hashtable<String, StudentReg> T = new Hashtable<>();  

然后您可以使用 foreach 构造迭代 values()

for (StudentReg s : T.values()) {
    System.out.println(T.RegNo + " " + T.Program + " " + T.FName));
}

【讨论】:

  • Lewandoski 它不工作我都试过了。它显示相同的异常
  • 你删除了演员阵容吗?你不再需要它了。
  • 当然,但是 for 循环更好
【解决方案2】:

您正在尝试转换字符串...键集返回所有键,而不是值... 如果你想要键和值,你可以这样做:

public static void main(String[] args) {
    Hashtable<String, String> hashtable = new Hashtable<String, String>();
    hashtable.put("a", "1");
    hashtable.put("b", "2");
    for (Entry<String, String> tuple : hashtable.entrySet()) {
        System.out.println(tuple.getKey(), tuple.getValue());
    }
}

【讨论】:

  • @henriquedg89 我想用键访问值
  • 但是兄弟我想在构造函数的帮助下访问这些值
  • 你拥有价值和密钥
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 2021-05-13
相关资源
最近更新 更多