你做事正确。请记住,aHashtable
不是直接访问结构。例如,您不能“从 a 中获取第三项Hashtable
”。当您谈论 a 时,“索引”一词没有真正的含义Hashtable
:项目的数字索引没有任何意义。
AHashtable
保证它将为您保存键值对,从而可以非常快速地根据键得出值(例如:给定Donald
,您将Trump
很快得到)。当然,必须满足某些条件才能使其正常工作,但对于您的简单字符串到字符串示例,这是有效的。
您应该阅读更多关于哈希表的一般信息,以了解它们在幕后是如何工作的。
编辑(根据 OP 的要求):您正在询问有关Student
在 Hashtable 中存储实例的问题。正如我上面提到的,必须解决某些条件才能使 Hashtable 正常工作。这些条件是关于关键部分,而不是价值部分。
如果您的Student
实例是value,而简单的 String 是key,那么您无需做任何特别的事情,因为 String 原语已经回答了正确 Hashtable 键所需的所有条件。
如果您的Student
实例是key,则必须满足以下条件:
在内部Student
,您必须hashCode
以这样的方式覆盖该方法,以便后续调用hashCode
将返回完全相同的值。换句话说,表达式x.hashCode() == x.hashCode()
必须始终为真。
在 内部Student
,您必须重写该equals
方法,使其仅返回true
两个相同的 实例,否则Student
返回。false
这些条件足以Student
充当适当的 Hashtable 键。你可以通过编写一个更好的hashCode
实现来进一步优化事情(阅读它......在这里输入很长),但只要你回答了上述两个,你就可以了。
例子:
class Student {
private String name;
private String address;
public int hashCode() {
// Assuming 'name' and 'address' are not null, for simplification here.
return name.hashCode() + address.hashCode();
}
public boolean equals (Object other) {
if (!(other instanceof Student) {
return false;
}
if (other == this) {
return true;
}
Student otherStudent = (Student) other;
return name.equals(otherStudent.name) && address.equals(otherStudent.address);
}
}