【问题标题】:How to remove first element from a TreeMap?如何从 TreeMap 中删除第一个元素?
【发布时间】:2016-01-01 16:14:57
【问题描述】:

我需要实现一个包含最多 32 个值的容器,其中元素按键排序。在 C++ 中这很容易,因为每个地图都按其键排序,在 Java 中我不太确定。

所以我读了一些并附带了一个 TreeMap。

如何有效地从 TreeMap(第一个)中删除最旧的元素?

谢谢!

【问题讨论】:

  • “最旧的” !== “第一个”?你到底想放什么,以什么样的顺序,你想删除什么元素?
  • map.iterator().next().remove()map.remove(map.firstKey())。如果“最旧”是指访问或插入顺序,您可能需要LinkedHashMap,而不是TreeMap
  • TreeMap 不是按您放入它们的顺序排序的。它按键值对它们进行排序。所以你不能真正删除最旧的,如果它不是在排序后在你的 Treemap 中的第一个位置。
  • 这里的关键是一个'sequenceNumber',它在同一个循环中递增。 map.push(sequenceNumber++, myobject);类似的东西

标签: java dictionary treemap


【解决方案1】:

你说

这里的关键是一个'sequenceNumber',它在同一个循环中递增。

通过 TreeMap documentation 声明

地图根据其键的自然顺序排序,或者根据地图创建时提供的 Comparator 排序,具体取决于使用的构造函数。

这样您就可以轻松地在排序后删除第一个元素。

例子:

TreeMap<Integer, String> map = new TreeMap<>();

map.put(1, "ac");
map.put(2, "ef");
map.put(3, "bd");

map.remove(map.firstKey());

【讨论】:

    【解决方案2】:

    使用LinkedHashMap,它有方法removeEldestEntry

    【讨论】:

    • 但是我需要对它进行排序,因为它并不总是排序,对吧?
    • 是的,但是由于 32 是一个很小的值,所以排序应该足够快。每次需要排序表示时都这样做。
    • RemoveEldestEntry 不会以任何方式更改 Map,它只是返回 false 并且什么都不做。地图必须被覆盖。检查javadoc(示例使用)如何做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多