【问题标题】:Iteration order for views derived from Guava ImmutableTable从 Guava ImmutableTable 派生的视图的迭代顺序
【发布时间】:2015-08-12 10:12:37
【问题描述】:

来自番石榴不可变表的派生视图是否在原始提供的表中保留插入顺序?

例如,考虑下面的“原始提供的表格”。

ImmutableTable<String, String, String> table = ImmutableTable.<String, String, String>builder()
.put("r1", "c1", "v1")
.put("r2", "c1", "v2")
.put("r3", "c1", "v3")
.put("r4", "c2", "v4")
.build();

现在如果我操作

table.column("c1").entrySet().iterator()

迭代是否会按照“原始提供的表”的插入顺序提供结果?

注意:根据documentation 对从 ArrayTable 派生的视图的迭代保留原始表中的插入顺序。我的用例更倾向于使用不可变表。

【问题讨论】:

    标签: java collections iteration guava


    【解决方案1】:

    是的。请参阅JavaDoc of ImmutableTable。

    具有可靠的用户指定迭代顺序的不可变表。

    加号:

    • ImmutableTable.column() 返回一个ImmutableMap,它在JavaDoc 中具有可靠的用户指定的迭代顺序。
    • 对于不可变的数据结构,我认为“迭代顺序”应该是其视图的行为。
    • 对于'用户指定的迭代顺序',ImmutableTable.Builder#orderColumnsBy可以实现。

    【讨论】:

    • 我问的是从不可变表派生的视图,而不是表本身。在示例中,column("c1") 例程将生成一个映射。地图上的迭代顺序(派生视图)是不够清晰的。
    • @maggu 是的。对于不可变的数据结构,“迭代顺序”应该是其视图的行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 2015-04-30
    • 2019-10-18
    • 2016-01-18
    • 2012-12-28
    • 2011-02-11
    • 2015-05-03
    相关资源
    最近更新 更多