【问题标题】:Does an unmodifiable view of TreeMap retain the key ordering?TreeMap 的不可修改视图是否保留键顺序?
【发布时间】:2014-06-12 20:13:27
【问题描述】:

假设我有一个TreeMap<Long,Long> map。我需要从 getter 查看不可修改的版本,因此我返回 Map<Long,Long>return Collections.unmodifiableMap(map);

但是,我需要以与 TreeMap<Long,Long> 时相同的键顺序返回它。当从TreeMap 创建时,我能否保证在所有情况下,在这个不可修改的Map 中,键的顺序都是相同的?

【问题讨论】:

    标签: java map immutability treemap unmodifiable


    【解决方案1】:

    是的

    这是一个视图。底层数据结构相同

    【讨论】:

    • 我还需要一个不可变的 TreeMap,但似乎 Collections.unmodifiableMap(treeMap) 返回的是地图,而不是树形图。因此,当我要求 keySet 时,我得到了一个没有排序的集合。请您为我详细说明一下?
    • @Robino A Set保证有订单,但当然它可以TreeSetSet 有订单。如果问题是您需要来自 NavigableSet interface 的方法,那就是另一个问题了。
    【解决方案2】:

    不可修改的映射只是原始映射的一个包装器,它在调用 mutator 时抛出异常,所有其他方法都是源映射的有效代理。

    值得注意的是,虽然视图是不可修改的,但底层映射仍然可以被变异,这些变异将反映在视图中。开发人员可能会引入错误,认为不可修改的地图是原始地图的不可变副本,而不是简单的不可修改的视图。

    【讨论】:

    • 链接到 grepcode 可以表明 call 只是对 constructor 的调用,该参数只是坐在那里,所有其他东西都抛出异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2010-12-23
    • 2010-10-14
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多