【问题标题】:TreeMap get first element and removeTreeMap 获取第一个元素并删除
【发布时间】:2015-10-20 21:26:13
【问题描述】:

我需要从TreeMap 中删除并获取第一个/最低的元素。但除非我忽略了某些事情,否则无法立即执行此操作。

removedValue = treeList.remove(treeList.firstEntry().getValue());

那条线必须访问地图两次,但它似乎是要走的路。我认为这不会有太大的不同,因为地图会在添加某些内容时进行排序,但我希望它具有功能。

【问题讨论】:

  • 你不能removedValue = treeList.pollFirstEntry().getValue();吗?
  • @AlexisC。这应该是一个答案。
  • @AlexisC。这是否也会从列表中删除该条目?
  • @MennoGouw 为什么不阅读 javadoc? docs.oracle.com/javase/7/docs/api/java/util/…
  • @JBNizet 是的,我应该有,但我没有想到,因为我没有将 remove 与“poll”联系起来。

标签: java dictionary data-structures


【解决方案1】:

如果您需要删除和获取条目,您可以使用pollFirstEntry()(假设您使用的变量类型至少是NavigableMap - 但由于您使用的是firstEntry,我猜对了)。

T2 removedValue = null;
Map.Entry<T1, T2> entry = treeList.pollFirstEntry();
if(entry != null) {
    removedValue = entry.getValue();
}

注意null 检查以避免在映射为空时出现 NPE(在这种情况下它将返回 null)。

【讨论】:

  • 我会在轮询之前使用 treeList.isEmpty() 检查而不是之后的 null 检查以使其更清晰。
【解决方案2】:

如果您使用的是 Java 8,我会推荐:

Optional<T2> removedValue = Optional.ofNullable(treeList.pollFirstEntry()).map(Map.Entry::getValue);

这可以很好地处理空列表,因为您可以使用 removedValue.isPresent() 检查是否返回值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多