我想访问哈希表中的值,但在我的代码中有一个例外。我想访问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 +"& #34; + S3.FName));我想访问在StudentReg()的构造函数中传递的值; 但我无法做到这一点
答案 0 :(得分:2)
你正在迭代你的键是字符串。如果要迭代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));
}
答案 1 :(得分:0)
您正在尝试强制转换String ...键集返回所有键,而不是值... 如果你想要键和值,你可以这样做:
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());
}
}