如何使用方法作为结构创建哈希表
How to create a Hashtable using a method as a struct
我的总体目标是用员工数据填充 Hashtable
并能够 access/modify 该数据然后打印出来。
鉴于我的 Employee
class 在这里,我可以像 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");
}
}
先谢谢大家了!
你的class有很多错误。
示例:class 称为 Employee。然后构造函数必须使用该名称,而不是其他名称!
所以,它不应该是
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 不是结构。哈希表是一个集合 class;换句话说:它是一张地图。它映射一个键(在你的例子中是字符串)到员工对象。
但是,好吧,Whosebug 不是供其他人调试和解释您的代码的服务。所以,以我的意见为起点;例如:开始阅读编译器消息。
你想要实现的是:
// 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)
修正几个拼写错误后,您的 class 员工应该是:
public class Employee {
...
public Employee(String empName, int empNum, String empJob)
{
...
}
public String getEmpName()
{
return empName;
}
public int getEmpNum()
{
return empNum;
}
...
}
注意: Hashtable
是一个过时的 class,你不应该再使用它,如果你不打算分享它使用 HashMap
instead and if you want to share it use a ConcurrentHashMap
您可以使用 put
方法将元素添加到哈希表中。您只需要指定 key 和 value.
然后您可以使用 get
方法并指定键来检索值。
用法示例:
Hashtable<String, Employee> table = new Hashtable<String, Employee>();
Employee bob = new Employee(...);
table.put("Bob", bob);
然后你可以说...
table.get("Bob");
这将为您 return Bob 的员工对象。
您的代码有问题:
您的代码存在一些您应该注意的问题。
1。你的 Employee Constructor 是错误的。
您在 Employee class 中获得了 Product
的构造函数。这是非法语法,不会编译(我希望)。相反,您应该使用 Employee
构造函数。
2。您的 Hashtable 变量名称与对象匹配 class.
您已将变量命名为 Object
。 Object 是所有 java class 继承自的 class,所以你 真的 不应该这样命名(如果它甚至可以让你。
Object documentation提到这个...
Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.
3。哈希表类型不正确。
您在哈希表声明中输入了错误的类型。
您写了...
Hashtable<String, Employee> EmployeeTable = new Hashtable<String, Product>();
什么时候真的应该...
Hashtable<String, Employee> employeeTable = new Hashtable<String, Employee>();
(产品改为员工)
(我也把变量改成了小写)
备注:
可以找到 Hashtable 的所有文档 here。
您可能也对使用 HashMap instead of a Hashtable. They're almost identical but HashMap isn't threadsafe. You can see some of the differences here. If you really need a threadsafe map then I'd recommend ConcurrentHashMap 感兴趣,不过您可以自行决定哪一个最适合您。
Java 约定变量名称以小写字母开头。您 不必 遵循此操作,但这绝对是个好主意。如果你这样做,语法高亮器将不再与你争论。
我的总体目标是用员工数据填充 Hashtable
并能够 access/modify 该数据然后打印出来。
鉴于我的 Employee
class 在这里,我可以像 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");
}
}
先谢谢大家了!
你的class有很多错误。
示例:class 称为 Employee。然后构造函数必须使用该名称,而不是其他名称!
所以,它不应该是
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 不是结构。哈希表是一个集合 class;换句话说:它是一张地图。它映射一个键(在你的例子中是字符串)到员工对象。
但是,好吧,Whosebug 不是供其他人调试和解释您的代码的服务。所以,以我的意见为起点;例如:开始阅读编译器消息。
你想要实现的是:
// 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)
修正几个拼写错误后,您的 class 员工应该是:
public class Employee {
...
public Employee(String empName, int empNum, String empJob)
{
...
}
public String getEmpName()
{
return empName;
}
public int getEmpNum()
{
return empNum;
}
...
}
注意: Hashtable
是一个过时的 class,你不应该再使用它,如果你不打算分享它使用 HashMap
instead and if you want to share it use a ConcurrentHashMap
您可以使用 put
方法将元素添加到哈希表中。您只需要指定 key 和 value.
然后您可以使用 get
方法并指定键来检索值。
用法示例:
Hashtable<String, Employee> table = new Hashtable<String, Employee>();
Employee bob = new Employee(...);
table.put("Bob", bob);
然后你可以说...
table.get("Bob");
这将为您 return Bob 的员工对象。
您的代码有问题:
您的代码存在一些您应该注意的问题。
1。你的 Employee Constructor 是错误的。
您在 Employee class 中获得了 Product
的构造函数。这是非法语法,不会编译(我希望)。相反,您应该使用 Employee
构造函数。
2。您的 Hashtable 变量名称与对象匹配 class.
您已将变量命名为 Object
。 Object 是所有 java class 继承自的 class,所以你 真的 不应该这样命名(如果它甚至可以让你。
Object documentation提到这个...
Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.
3。哈希表类型不正确。
您在哈希表声明中输入了错误的类型。
您写了...
Hashtable<String, Employee> EmployeeTable = new Hashtable<String, Product>();
什么时候真的应该...
Hashtable<String, Employee> employeeTable = new Hashtable<String, Employee>();
(产品改为员工)
(我也把变量改成了小写)
备注:
可以找到 Hashtable 的所有文档 here。
您可能也对使用 HashMap instead of a Hashtable. They're almost identical but HashMap isn't threadsafe. You can see some of the differences here. If you really need a threadsafe map then I'd recommend ConcurrentHashMap 感兴趣,不过您可以自行决定哪一个最适合您。
Java 约定变量名称以小写字母开头。您 不必 遵循此操作,但这绝对是个好主意。如果你这样做,语法高亮器将不再与你争论。