【问题标题】:How to create a Hashtable using a method as a struct如何使用方法作为结构创建 Hashtable
【发布时间】:2016-08-31 13:32:31
【问题描述】:

我的总体目标是用员工数据填写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");
    }
}

提前谢谢大家!

【问题讨论】:

  • 另外,您的问题到底是什么?你创建了一个类,然后在你的 main 中创建了一个实例,然后呢?你试图用它做什么,你的问题在哪里,发生了什么,......?
  • "access the employee number on its own" 是什么意思? employeeTable.get("Donald").getEmpNum() 之类的东西?
  • 您应该首先修复您的 Employee 类,并确保它在其他任何事情之前编译。
  • 在这里修复了Employee类,我对错字表示歉意!

标签: java hashtable


【解决方案1】:

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

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

示例用法:

Hashtable<String, Employee> table = new Hashtable<String, Employee>();
Employee bob = new Employee(...);
table.put("Bob", bob);

然后你可以说...

table.get("Bob");

这将为您返回 Bob 的 Employee 对象。

您的代码有问题:

您的代码存在一些您应该注意的问题。

1。您的 Employee 构造函数是错误的。

您的 Employee 类中有 Product 的构造函数。这是非法语法,不会编译(我希望如此)。相反,您应该使用 Employee 构造函数。

2。您的 Hashtable 变量名称与 Object 类匹配。

您已将变量命名为 ObjectObject 是所有 java 类都继承自的类,所以你真的不应该这样命名(如果它甚至允许你的话)。

Object documentation 提到了这个...

类对象是类层次结构的根。每个类都有 Object 作为超类。所有对象,包括数组,都实现了这个类的方法。

3。哈希表类型不正确。

您在 Hashtable 声明中放置了错误的类型。

你写的……

Hashtable<String, Employee> EmployeeTable = new Hashtable<String, Product>();

什么时候真的应该……

Hashtable<String, Employee> employeeTable = new Hashtable<String, Employee>();

(Product 更改为 Employee)
(我也将变量更改为小写)

注意事项:

  • 哈希表的所有文档都可以在here找到。

  • 您可能还对使用 HashMap 而不是 Hashtable 感兴趣。它们几乎相同,但 HashMap 不是线程安全的。您可以看到here 的一些差异。如果您真的需要一个线程安全映射,那么我会推荐ConcurrentHashMap,不过,由您决定哪个最适合您。

  • Java 约定变量名以小写字母开头。您没有必须遵循这一点,但这绝对是一个好主意。如果您这样做,语法荧光笔将不再与您争论。

【讨论】:

  • 为这样一个低质量的问题做了大量工作。但是,干得好!希望您对这项工作获得更多支持。
  • @GhostCat 感谢您的好评,我喜欢在这个网站上看到积极的一面。任何可以帮助并提高声誉的东西哈哈。
  • 是的,而且非常糟糕的是:那家伙的问题得到了-5;所以最坏的情况;他会在某个时候删除他的问题。泡芙是你的答案(和我的)。因此,在回答这样的低质量问题时要小心。我并不是说你最好支持他来保护你的工作;当然不是 ;-)
  • 不要投票给我,我也不会删除这个。所有这些答案都很棒,我全心全意地感谢他们。我对 stackoverflow 非常陌生,并且再次掌握了 Java 的窍门。这对我来说是一个学习过程。我会尽我所能在未来提出更好的问题。积极的一面是,每个人都以一种易于理解的方式真正提供了很多帮助。
【解决方案2】:

你想要达到的目的是这样的:

// 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)

修复几个错字问题后,您的 Employee 类应该是:

public class Employee {

    ...
    public Employee(String empName, int empNum, String empJob)
    {
        ...
    }

    public String getEmpName()
    {
        return empName;
    }
    public int getEmpNum()
    {
        return empNum;
    }
    ...
}

注意: Hashtable 是一个过时的类,你不应该再使用它,如果你不打算分享它使用 HashMap 代替,如果你想分享它使用ConcurrentHashMap

【讨论】:

  • 感谢您的回答! EmployeeTable.put(employee.getEmpName(), 雇员);
  • @AJ4ms 没问题
【解决方案3】:

您的班级存在各种错误

示例:该类名为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 不是结构。哈希表是一个 collection 类;换句话说:它是一个地图。它一个键(在您的情况下为字符串)映射到 Employee 对象。

但是,好吧,stackoverflow 不是一项让其他人调试和向您解释您的代码的服务。所以,以我的意见为出发点;例如:开始阅读编译器消息。

【讨论】:

  • "新哈希表>();"
猜你喜欢
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2013-05-29
  • 1970-01-01
  • 2014-02-13
相关资源
最近更新 更多