Java 如何使用方法作为结构创建哈希表

Java 如何使用方法作为结构创建哈希表,java,hashtable,Java,Hashtable,我的总体目标是用员工数据填充哈希表,并能够访问/修改该数据,然后将其打印出来。 给定我的Employee类,我可以像C中的结构一样使用它吗?我试图找出如何初始化一个哈希表并用这些数据填充它,但我对如何实现它有点困惑 public class Employee { private String empName; private int empNum; private String empJob; public Employee(String empName, i

我的总体目标是用员工数据填充
哈希表
,并能够访问/修改该数据,然后将其打印出来。 给定我的
Employee
类,我可以像C中的结构一样使用它吗?我试图找出如何初始化一个
哈希表并用这些数据填充它,但我对如何实现它有点困惑

public class Employee {

    private String empName;
    private int empNum;
    private String empJob;

    public Employee(String empName, int empNum, String empJob)
    {
        this.empName = empName;
        this.empNum = empNum;
        this.empJob = empJob;

    }

    public int getEmpName()
    {
        return empName;
    }
    public String getEmpNum()
    {
        return empNum;
    }
    public String getEmpJob()
    {
        return empJob;
    }    
}
所以,我在main中尝试了这个方法,使用字符串作为键,所以我想使用名称作为键,这样您就可以按名称进行搜索。我还尝试手动填充它,以便可以测试所有内容。另外,我是否能够自己访问员工号码?如果是,我该怎么做

    public class Main {

    public static void main(String[] args) 
    {
        Hashtable<String,Employee> EmployeeTable = new Hashtable<String,Employee>(); 
        Employee Object = new Employee("Donald","Donald", 3, "Engineer");
    }
}
公共类主{
公共静态void main(字符串[]args)
{
Hashtable EmployeeTable=新的Hashtable();
员工对象=新员工(“唐纳德”,“唐纳德”,3,“工程师”);
}
}

提前谢谢大家

你们班有各种各样的错误

示例:该类称为Employee。然后构造函数必须使用该名称,而不是其他名称

所以,它不应该读

public Product(String empName, int empNum, String empJob)
但是

然后是你的电话

Hashtable<String,Employee> EmployeeTable = new Hashtable<String,Product>();
Hashtable EmployeeTable=new Hashtable();
可以正确地写为

Hashtable<String,Employee> table = new Hashtable<>();
Hashtable=newhashtable();
不,哈希表不是结构。哈希表是一个集合类;换句话说,这是一张地图。它将一个键(在您的例子中是字符串)映射到Employee对象


但是,stackoverflow不是一个其他人调试并向您解释代码的服务。所以,以我的投入为出发点;例如:开始读取编译器消息

你想要实现的是:

// Create my Hashtable using the diamond notation indicating  to use the type arguments
// corresponding to the context which is <String, Employee> here
Map<String, Employee> EmployeeTable = new Hashtable<>();
Employee employee = new Employee("Donald", 3, "Engineer");
// put my employee into my map using empoyee's name as key
EmployeeTable.put(employee.getEmpName(), employee);

NB:
哈希表
是一个过时的类,您不应该再使用它,如果您不想共享它,请使用,如果您想共享它,请使用

您可以使用
put
方法将元素添加到哈希表中。只需指定

然后可以使用
get
方法检索值并指定键

用法示例: 这将为您返回Bob的Employee对象

代码的问题: 您的代码中有一些问题需要注意

1.您的员工构造函数是错误的。 在Employee类中有一个
Product
的构造函数。这是非法语法,不会编译(我希望)。相反,您应该使用
Employee
构造函数

2.哈希表变量名与对象类匹配。 您已经命名了一个变量
对象
。是所有java类继承自的类,因此您确实不应该这样命名(如果它允许您命名的话)

政府提到这一点

类对象是类层次结构的根。每个类都有对象作为超类。所有对象(包括数组)都实现此类的方法

3.哈希表类型不正确。 您在哈希表声明中输入了错误的类型

你写了

Hashtable<String, Employee> EmployeeTable = new Hashtable<String, Product>();
Hashtable EmployeeTable=new Hashtable();
当它真的应该是

Hashtable<String, Employee> employeeTable = new Hashtable<String, Employee>();
Hashtable employeeTable=new Hashtable();
(产品改为员工)
(我还将变量更改为小写)

笔记:
  • 可以找到Hashtable的所有文档

  • 您可能还对使用哈希表而不是哈希表感兴趣。它们几乎相同,但HashMap不是线程安全的。你可以看到一些不同之处。如果你真的需要一个线程安全的地图,那么我建议,这取决于你决定哪一个最适合你

  • 变量名以小写字母开头是Java的惯例。你不必遵循这一点,但这绝对是一个好主意。如果你这样做,语法高亮者将不再与你争论


另外,您到底有什么问题?您创建了一个类,然后在main中创建了一个实例,然后?您试图用它做什么,您的问题在哪里,发生了什么…?您所说的:
“自己访问员工号码”
是什么意思?类似于
employeeTable.get(“Donald”).getEmpNum()
?您应该首先修复Employee类,并确保它在任何其他操作之前编译。修复了此处的Employee类,我对输入错误表示歉意!“新哈希表>();”谢谢您的回答!EmployeeTable.put(employee.getEmpName(),employee)@AJ4M没有问题。对于这样一个低质量的问题,需要做很多工作。但是,干得好!希望你能为这项工作获得更多的支持。@GhostCat谢谢你的好意评论,我喜欢在这个网站上看到积极的一面。任何有助于提高声誉的事情都可以,哈哈。是的,还有一件非常糟糕的事:那家伙的问题得到-5分;所以最坏的情况;他将在某个时候删除他的问题。你的答案(和我的答案)都泡汤了。因此,在回答像这样的低质量问题时要小心。我并不是说你最好投票给他来保护你的工作;当然不是;-)不要投票给我,不,我不会删除这个。所有这些答案都很好,我非常感激。我对stackoverflow非常陌生,并再次掌握了Java的窍门。这对我来说是一个学习的过程。将来我会尽力问更好的问题。从积极的方面来说,每个人都以一种易于消化的方式真正地帮助了很多人。
Hashtable<String, Employee> table = new Hashtable<String, Employee>();
Employee bob = new Employee(...);
table.put("Bob", bob);
table.get("Bob");
Hashtable<String, Employee> EmployeeTable = new Hashtable<String, Product>();
Hashtable<String, Employee> employeeTable = new Hashtable<String, Employee>();