【问题标题】:Get values of a HASHMAP获取 HASHMAP 的值
【发布时间】:2019-03-04 17:25:31
【问题描述】:

我正在尝试从哈希图中访问一对的值。 我有一个 Map ,其中 Integer 是键,info 是值。 我想遍历地图并从 info 对象中获取特定的数据字段(namePlayer)。

class info{
    public String namePlayer;
    public String knowledge; 
    public int coins;

    info(String nom,String coneixament,int monedes){
        namePlayer=nom;
        knowledge=coneixament;
        coins=monedes;
    }

    void setMonedes(int monedes){
        coins=monedes;
    }

    void setConeixement(String confianza){
        knowledge=confianza;
    }
    String getConeixament(){
        return knowledge;
    }
    String getNames(){
        return name;
    }
}
public class Memory{
    private Map<Integer,info> k;

    Memory(){
        k= new HashMap<Integer, info>();
    }

    void getValues(){
        Iterator it = _infoPartida.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pair = (Map.Entry)it.next();
            info s = pair.getValues();// error
            String name = s.getNames():
         }
    }
}

【问题讨论】:

  • 真正的问题是什么? getValues() 是 void 类型,所以它不会返回任何东西?
  • 首先,它是getValue(),而不是getValues()。其次,getValue() 将返回一个Object,因为您使用的是原始类型。
  • 一个条目包含一个键和一个值,使用pair.getValue()获取它的值。
  • 我只想打印拥有键 2 的玩家的名字。
  • 那么你不需要遍历整个集合。您可以 .get(7) 从 HashMap 中获取值。

标签: java dictionary hashmap keyvaluepair


【解决方案1】:

您需要将泛型信息添加到您的Iterator

void getValues(){
    Iterator<info> it = k.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pair = it.next();
        info s = pair.getValue();
        String name = s.getNames():
    }
}

【讨论】:

    【解决方案2】:
    void getValues(){
        Iterator it = _infoPartida.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pair = (Map.Entry)it.next();
            info s = pair.getValues();// error
            String name = s.getNames():
         }
    }
    

    应该是这样的

    public String getPlayerName(int index) {
       info i = k.get(index);
       return i.getNames();
    }
    

    【讨论】:

    • 另外,看看 cmets 并改变你的语法......类应该以大写开头,变量名应该描述它们所包含的内容。
    【解决方案3】:

    正如@Lee 先生指出的那样..您必须将泛型添加到您的Iterator...
    Map.Entry

    void getValues(){
        Iterator<Map.Entry<Integer,info>> it = _infoPartida.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Integer,info> pair = it.next();
            info s = pair.getValue();
            String name = s.getNames();
         }
    }
    

    假设k_infoPartida
    另外,请考虑@Rainer 的 3 点。

    【讨论】:

    • @JohannisK,​​你是对的。它只是更正了getValues 方法。这是在他更新他的实际要求之前发布的。
    【解决方案4】:
    1. Java 中的类名是大写的(信息 - 不是信息)
    2. k 是一个可怕的变量名称
    3. 这在 Java 中很容易

      for (Info info : k.values()){
          System.out.println(info.getNames();
      }
      

    给你。

    有关如何处理地图的更多信息,请查看dokumentation

    【讨论】:

    • 顺便说一句。不确定“in”或“:”是否正确......过去做了很多 python ;-)
    【解决方案5】:

    这里有两个选择。使用 for 循环或迭代器循环。正如@Rainer 所示,for 循环很简单,但是 Iterator 更强大,因为它允许您删除您是一个元素并且具有更多功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 2013-10-05
      相关资源
      最近更新 更多