哈希表Java插入

时间:2012-12-08 01:09:41

标签: java hashtable

我是Java的新手,我正在尝试了解哈希表。我想将对象插入到我的哈希表中,然后能够在最后打印哈希表中的所有对象。我不确定我这样做是否正确,因为我已经读过我需要覆盖get()方法或hashCode()方法,但我不确定原因。

我传递学生姓名的String对象。当我在插入后运行调试器时,它将键显示为“null”,并且我的插入的索引位于哈希表中的随机位置。防爆。 1,6,10

这就是我一直在添加的方式。任何人都可以告诉我这是否正确,我真的需要覆盖一些事情吗?

提前致谢!

CODE

 Hashtable<String,String> hashTable=new Hashtable<String,String>();
 hashTable.put("Donald", "Trump");
 hashTable.put("Mike", "Myers");
 hashTable.put ("Jimmer", "Markus");

2 个答案:

答案 0 :(得分:4)

你正确地做事。请记住,Hashtable不是直接访问结构。例如,您无法“从Hashtable获取第三项”。当你谈论Hashtable时,术语“索引”没有任何实际意义:项目的数字索引毫无意义。

Hashtable保证它将为您保存键值对,其方式是非常快速结束基于键的值(例如:给定Donald,您很快就会得到Trump。当然,必须满足某些条件才能正常工作,但是对于简单的String-to-String示例,这是有效的。

您应该阅读有关哈希表的更多信息,以了解它们在幕后的实际工作方式。

编辑(根据OP的请求):您要求在Hashtable中存储Student个实例。如上所述,必须解决某些条件才能使Hashtable正常工作。这些条件与部分有关,而不是部分。

如果你的Student实例是,而一个简单的字符串是,那么你没什么特别的,因为String原语已经回答了正确的Hashtable密钥所需的所有条件。

如果您的Student实例是,则必须满足以下条件:

  1. Student内,您必须覆盖hashCode方法,以便hashCode的后续调用将返回完全相同的值。换句话说,表达式x.hashCode() == x.hashCode()必须始终为真。

  2. Student内,您必须覆盖equals方法,使其只返回true两个相同的Student实例,并返回否则false

  3. 这些条件足以使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);
        }
    }
    

答案 1 :(得分:1)

试试这段代码:

 Hashtable<String,String> hashTable=new Hashtable<String,String>();

 hashTable.put("Donald", "16 years old");
 hashTable.put("Mike", "20 years old");
 hashTable.put ("Jimmer", "18 years old");

Enumeration studentsNames; 
String str; 


// Show all students in hash table. 
studentsNames = hashTable.keys(); 
while(studentsNames.hasMoreElements()) { 
str = (String) studentsNames.nextElement(); 
txt.append("\n"+str + ": " + hashTable.get(str)); 
}