访问 LinkedHashMap 中最后一个对象中的方法

Posted

技术标签:

【中文标题】访问 LinkedHashMap 中最后一个对象中的方法【英文标题】:Accesing a method in the last object in a 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对象中。 【参考方案1】:

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

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

编辑:

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

【讨论】:

或者您可以使用重载Set.toArray(T[]) 来避免强制转换。【参考方案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()

希望对你有帮助

【讨论】:

谢谢,但我不想得到最后一个值。我正在尝试获取最后一个密钥。 对不起,我误解了你的问题,让我更新我的答案。

以上是关于访问 LinkedHashMap 中最后一个对象中的方法的主要内容,如果未能解决你的问题,请参考以下文章

Android LruCache原理

linkedHashMap转对象后元素乱序怎么解决?

Java LinkedHashMap 获取第一个或最后一个条目

在 Java 中收缩 LinkedHashMap

如何同步缓存列表访问

LinkedHashMap