【问题标题】:Casting a Object to HashMap将对象转换为 HashMap
【发布时间】:2010-10-21 04:50:04
【问题描述】:

我无法确定如何计算 HashMap 中的值实例。 我已经看到 Object 类附加了一些方法,它们看起来好像可以帮助我,所以我尝试将它们投入使用,但我一定在某处做错了。

如果有更简单的方法,我还没有找到。 注意:库是我的 HashMap。

public void borrowBooks(String id, String name, String sid, String sname) {
    if((getKeyFromValue(Books, name).equals(id))&&(getKeyFromValue(Students, sname).equals(sid))){
        if((Object)Library.countValues(sid)!=5){
            Library.put(id, sid);
        }
        else{
            System.out.println("You have exceeded your quota. Return a book before you take one out." );
        }
    }
}

【问题讨论】:

  • 您的库是如何定义的?看起来这些值是学生 ID 字符串?关键是什么?

标签: java object hashmap


【解决方案1】:

你在看哪个文档? Hashmap 的 Javadoc 没有指定 countValues() 方法。

我认为您想要一个HashMap<String, List<String>>,因此您可以存储每个学生的书籍列表(如果我正确阅读了您的代码)。

您必须为每个学生创建一个列表并将其放入 HashMap,然后您可以使用 List.size() 简单地计算列表中的条目。

例如

if (Library.get(id) == null) {
   Library.put(id, new ArrayList<String>());
}
List<String> books = Library.get(id);
int number = books.size() // gives you the size

忽略线程等

【讨论】:

    【解决方案2】:

    首先:几乎)向Object 投射任何东西是没有意义的。由于所有内容都扩展了Object,因此您始终可以在不强制转换的情况下访问这些方法。

    第二:你的转换方式实际上是转换返回值,而不是库。如果你正在做一个真正必要的演员表,你需要一组额外的括号:

    if(((Object)Library).countValues(sid) != 5)
    

    第三:HashMapObject 中都没有countValues 方法。你必须自己做。

    这是要使用的通用算法(我犹豫发布代码,因为这看起来像家庭作业):

    initialize count to 0
    for each entry in Library:
        if the value is what you want:
            increment the count
    

    【讨论】:

      【解决方案3】:
      int count = 0;
      
      for(String str : Library.values())
      {
          if(str == sid)
              count++;
          if(count == 5)
              break;
      }
      
      if(count < 5)
          Library.put(id, sid);
      else
          System.out.println("You have exceeded your quota. Return a book before you take one out." );
      

      【讨论】:

        猜你喜欢
        • 2016-12-22
        • 2019-07-27
        • 2022-11-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多