【问题标题】:Accesing a method in the last object in a LinkedHashMap访问 LinkedHashMap 中最后一个对象中的方法
【发布时间】:2018-10-14 03:44:50
【问题描述】:

我有一个 LinkedHashMap,其中包含一个位于 key 的对象和一个位于 value 的对象。

我用过代码

yourShots.keySet().toArray()[yourShots.size()-1]

返回keys 的最后一个对象。但是,我无法访问该对象具有的方法。

我已使用getClass() 方法确定我确实拥有正确的对象类型,但无法调用该方法。我只是得到了找不到方法的错误。

我做错了吗?

【问题讨论】:

  • 你是说你试图调用的方法是在键/值的 value 对象上,而不是 key 对象上Map?中的对?
  • 你能显示你将结果分配给哪个变量以及 yourShots 的声明吗?
  • 如果知道key,就不需要构造数组
  • 显示更多代码。 yourShots 是如何定义的?也许你需要一个演员......
  • @Andreas 没有。方法在key对象中。

标签: java arrays hashmap bluej linkedhashmap


【解决方案1】:

toArray 给你通用的Object 类型。在使用它之前,您必须将其转换为您的 key 类。

KeyClass key = (KeyClass) yourShots.keySet().toArray()[yourShots.size()-1];
// Here you can access your desired method

编辑:

正如@rgettman 建议的那样,您可以使用重载版本toArray(T[]) 来避免强制转换。在这种情况下,您应该预先提供一个大小为keySet() 的初始化数组。

【讨论】:

【解决方案2】:

或者,您可以使用Iterator 来避免将所有不需要的键复制到数组中,然后再将其丢弃。由于是通用的,它还节省了演员表。

Key key = null;
for(Iterator<Key> iterator = yourShots.keySet().iterator(); iterator.hasNext();) {
    key = iterator.next();
}

【讨论】:

    【解决方案3】:

    编辑:
    您可以将keySet 转换为List,然后获取最后一个对象。
    像这样的:

    List<Key> keys = new ArrayList(yourShots.keySet());
    Key lastKey = keys.get(keys.size() - 1);
    

    原帖
    您正在访问错误的方法。

    yourShots.keySet() 返回一个包含Map 中所有键的Set

    要访问地图中的最后一个值,您需要调用:yourShots.values()

    希望对你有帮助

    【讨论】:

    • 谢谢,但我不想得到最后一个值。我正在尝试获取最后一个密钥。
    • 对不起,我误解了你的问题,让我更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多