我的总体目标是用Hashtable
填写员工数据,并能够访问/修改该数据然后将其打印出来。
鉴于我的Employee
类,我可以像C中的结构一样使用它吗?我试图弄清楚如何初始化Hashtable
并用这些数据填充它,但我对如何实现它感到困惑。
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中尝试了这个,使用String作为键,所以我想使用名称作为键,以便您可以按名称搜索。我也尝试手动填充它,以便我可以测试一切。此外,我可以访问说,它上面的员工编号吗?如果是的话,我该怎么做?
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");
}
}
先谢谢大家!
答案 0 :(得分:2)
您可以使用put
方法向Hashtable添加元素。您只需指定键和值。
然后,您可以使用get
方法检索值并指定密钥。
Hashtable<String, Employee> table = new Hashtable<String, Employee>();
Employee bob = new Employee(...);
table.put("Bob", bob);
然后你可以说......
table.get("Bob");
这将为您返回Bob的Employee对象。
您应该注意您的代码存在一些问题。
您的Employee类中有Product
的构造函数。这是非法的语法,不会编译(我希望)。相反,您应该使用Employee
构造函数。
您已命名变量Object
。 Object是所有java类继承的类,因此真的不应该为此命名(如果它甚至可以让你的话)。
Object documentation提到了这个......
Class Object是类层次结构的根。每个类都有Object作为超类。所有对象(包括数组)都实现此类的方法。
您在Hashtable声明中添加了错误的类型。
你写了......
Hashtable<String, Employee> EmployeeTable = new Hashtable<String, Product>();
什么时候真的应该......
Hashtable<String, Employee> employeeTable = new Hashtable<String, Employee>();
(产品已更改为员工)
(我还将变量更改为小写)
可以找到Hashtable的所有文档here。
您可能也有兴趣使用HashMap而不是Hashtable。它们几乎完全相同,但HashMap不是线程安全的。您可以看到一些差异here。如果您确实需要线程安全地图,那么我建议ConcurrentHashMap,由您决定哪一个最适合您。
< / LI>变量名称的Java约定以小写字母开头。你没有 来遵循这个,但这绝对是一个好主意。如果你这样做,语法荧光笔将不再与你争论。
答案 1 :(得分:1)
您的班级有很多错误。
示例:该类名为员工。然后构造函数必须使用该名称,而不是其他任何东西!
所以,它不应该读
public Product(String empName, int empNum, String empJob)
但
public Employee(String empName, int empNum, String empJob)
然后你的电话
Hashtable<String,Employee> EmployeeTable = new Hashtable<String,Product>();
可以正确写为
Hashtable<String,Employee> table = new Hashtable<>();
不, Hashtable 不是结构。哈希表是集合类;换句话说:它是一张地图。它映射一个键(在您的情况下为String)到Employee对象。
但是,stackoverflow不是其他人调试并向您解释代码的服务。所以,把我的输入作为起点;例如:开始阅读编译器消息。
答案 2 :(得分:1)
你想要达到的目的是:
// 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);
您要找的是Map#put(key, value)
在解决几个拼写错误问题后,您的班级员工应该是:
public class Employee {
...
public Employee(String empName, int empNum, String empJob)
{
...
}
public String getEmpName()
{
return empName;
}
public int getEmpNum()
{
return empNum;
}
...
}
注意: Hashtable
是一个过时的类,你不应该再使用它了,如果你不打算分享它,请使用HashMap
而不是你想要的分享使用ConcurrentHashMap