【问题标题】:How update a value of a HashMap that is an object?如何更新作为对象的 HashMap 的值?
【发布时间】:2017-03-08 05:41:20
【问题描述】:

如果该值是一个名为 Hand 的类

public class Hand implements Iterable<Card>{
    protected List<Card> cards;
    .....
    .....
}

我的 HashMap 是

HashMap<Integer, Hand> hashMap;

如果我想在Hand的实例字段中添加一个Card对象,即cards,我需要这样做吗

hashMap.get(i).cards.add(Card Object) 

或者我需要这样做

hashMap.put(i, hashMap.get(i).cards.add(Card Object))

【问题讨论】:

  • 您是否尝试了这两个选项,看看会发生什么?
  • add(Card Object) 不会编译。

标签: java hashmap


【解决方案1】:

假设Hand 实例已经存在,您可能需要检索该实例:

Hand hand = hashMap.get(i);

拥有实例后,您想访问其cards 列表并向其中添加另一张卡:

Card card = ...;
hand.cards.add(card); //consider using a getMethod to get the cards

或者在你自己的代码中:

hashMap.get(i).cards.add(card);

您不需要重新映射 hashmap 中的 hand 元素,因为您没有替换实际的 Hand 对象,因此映射中对它的引用保持不变。您所做的只是通过在Hands 的卡片中添加一项来修改其属性之一。

【讨论】:

    【解决方案2】:

    Hand 类中为cards 使用getter,例如

    protected List<Card> getCards() {
        return this.cards;
    }
    

    然后更新如下——

    hashMap.get(i).getCards().add(new Card())
    

    尝试

    hashMap.put(i, hashMap.get(i).getCards().add(new Card()))
    

    正在尝试将从add 返回的boolean 放在索引i 中,而不适合您的逻辑。

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 2012-01-28
      相关资源
      最近更新 更多