You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Employee类中获取Stock类的HashMap值?

解决Employee类访问Stock类HashMap键值对的问题

现有代码的冗余问题

你当前的Employee构造函数存在不必要的HashMap复制操作:

this.pro = stock.products;
for(String k : stock.getProducts().keySet()){
    pro.put(k, stock.getProducts().get(k));
}

pro = stock.products已经让pro直接引用了Stock的products HashMap,后续的循环复制完全多余,属于重复操作。


几种可行的实现方式

方式1:直接调用Stock类已有的listProducts方法(最简洁)

Stock类已经实现了listProducts()方法用于遍历输出所有键值对,Employee的viewSupplies可以直接委托给这个方法:

public void viewSupplies(){
    stock.listProducts();
}

方式2:通过Stock的getProducts方法获取HashMap后遍历

利用Stock提供的getProducts()方法获取HashMap,再遍历输出,这种方式更符合封装原则(不直接访问public成员):

public void viewSupplies(){
    HashMap<String, Integer> products = stock.getProducts();
    for (Map.Entry<String, Integer> entry : products.entrySet()){
        System.out.println(entry.getKey() + ": " + entry.getValue());
    }
}

这种方式比遍历keySet()再调用getValue()更高效,因为entrySet()可以直接拿到完整的键值对,减少一次哈希查找。

方式3:直接访问Stock的public products成员(不推荐)

虽然Stock的products是public的,可以直接访问,但这种做法破坏了封装性,后续如果Stock的内部实现修改(比如换成其他集合类型),Employee的代码也需要跟着调整:

public void viewSupplies(){
    for (Map.Entry<String, Integer> entry : stock.products.entrySet()){
        System.out.println(entry.getKey() + ": " + entry.getValue());
    }
}

方式4:优化你原本的代码(去掉冗余)

如果坚持要在Employee里维护一个pro引用,只需去掉构造函数里的循环复制,同时改用getProducts()获取集合(更规范):

// 构造函数修改
public Employee(int id, String n, String pho, String u, String pa, int sId){
    this.ID=id;
    this.name = n;
    this.phoneNumber=pho;
    this.username=u;
    this.password=pa;
    this.stock = new Stock(sId);
    this.pro = stock.getProducts();
}

// viewSupplies修改
public void viewSupplies(){
    for (Map.Entry<String, Integer> entry : pro.entrySet()){
        System.out.println(entry.getKey() + ": " + entry.getValue());
    }
}

额外建议

  • 尽量避免把集合成员设为public,依赖getter方法更符合面向对象的封装原则,能降低类之间的耦合度。
  • 遍历HashMap时优先使用entrySet(),性能优于keySet()搭配getValue()的组合。

内容的提问来源于stack exchange,提问作者emcosokic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:50:36