【问题标题】:Why is my HashMap not incrementing value为什么我的 HashMap 没有增加值
【发布时间】:2016-06-19 11:16:24
【问题描述】:

我不明白为什么我的地图值没有增加!!!

<% Collection<Product> items = basket.getItems();
HashMap<Product,Integer> itemMap = new HashMap<Product,Integer>();

for(Product p : items){
    if(!itemMap.containsKey(p)){
        itemMap.put(p,1);}
    else{itemMap.put(p, itemMap.get(p) + 1);}
    out.println("<p>"+itemMap+"</p>");
}%>

每次都是1!

【问题讨论】:

  • 最可能的原因是Product 没有覆盖hashCodeequals
  • 能分享一下Product的实现吗?
  • 可能的解释是您的集合中没有任何重复的产品。收藏中是否有equals 另一个产品?另外,请不要使用小脚本。将该代码放入 servlet。

标签: java dictionary foreach


【解决方案1】:

好的,我修好了! 不要问我为什么,但它有效?!

<% Collection<Product> items = basket.getItems();
HashMap<String,Integer> itemMap = new HashMap<String,Integer>();
ArrayList<String> dumbArray = new ArrayList<String>();

for(Product p : items){
    dumbArray.add(p.toString());
}

for(String p : dumbArray){
    if(!itemMap.containsKey(p)){
        itemMap.put(p,1);}
    else{itemMap.put(p, itemMap.get(p) + 1);}
    out.println("<p>"+itemMap+"</p>");
}%>

数组ftw?

【讨论】:

  • 这似乎强化了 Eran 和 JB Nizet 所说的,没有一个值是相等的,但它们的字符串表示是相等的。这是一个SnackOverflow question,可能有助于阐明如何解决此问题。
  • @Obicere 是的,我听取了他的意见来帮助我解决问题?为什么投反对票,有点不公平
  • 这个解决方案有点像在大坝上用口香糖堵住一个洞。您没有解决根本问题,而是简单地避免了处理它。但是,覆盖 hashCodeequals 是解决此问题并遵守 Java 原则的更好方法。
  • @Obicere 好的,指出,现在我只是在寻找修复,但将来我会记住这一点,谢谢
猜你喜欢
  • 2021-04-06
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
相关资源
最近更新 更多