あなたは物事を正しく行っています。aHashtable
は直接アクセス構造体ではないことに注意してください。Hashtable
たとえば、「 a から 3 番目の項目を取得する」ことはできません。について話している場合、「インデックス」という用語には実際の意味はありませHashtable
ん。アイテムの数値インデックスは何の意味もありません。
は、キーに基づいて値を結論付けるのが非常にHashtable
高速になるように、キーと値のペアを保持することを保証します(たとえば、与えられた は、非常に迅速に取得されます)。もちろん、これが正しく機能するには特定の条件を満たす必要がありますが、単純な文字列から文字列への例では、それが機能します。Donald
Trump
ハッシュテーブルが舞台裏で実際にどのように機能するかを確認するには、一般的なハッシュテーブルについてもっと読む必要があります。
編集Student
(OPの要求による):インスタンスをハッシュテーブルに保存することについて質問しています。上で述べたように、Hashtable が正しく機能するには、特定の条件に対処する必要があります。これらの条件は、値の部分ではなく、キーの部分に関するものです。
Student
インスタンスがvalueで単純な String がkeyの場合、String プリミティブは適切な Hashtable キーに必要なすべての条件に既に応答しているため、特別なことは何もありません。
Student
インスタンスがキーの場合、次の条件を満たす必要があります。
の内部では、以降の の呼び出しがまったく同じ値を返すようにメソッドをStudent
オーバーライドする必要があります。つまり、式は常にtrue でなければなりません。hashCode
hashCode
x.hashCode() == x.hashCode()
の内部では、 の 2 つの同一のインスタンスに対してのみ戻り、それ以外の場合は戻るように、メソッドをオーバーライド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);
}
}