【问题标题】:ArrayList of ArrayLists: Check That Each ArrayList Has Same Number of ItemsArrayList 的 ArrayList:检查每个 ArrayList 是否具有相同数量的项
【发布时间】:2013-01-08 19:18:02
【问题描述】:

我有一个 ArrayList 的 ArrayList。我想确保每个组成的 ArrayLists 具有相同数量的项目。有没有办法在不到 n 的时间内做到这一点!时间?

【问题讨论】:

  • 为什么这需要 O(n!) 时间?
  • 因为我写简单的代码太久了,心都融化了。

标签: java algorithm data-structures arraylist


【解决方案1】:

绝对!一次迭代一个ArrayLists。存储第一个ArrayList 的大小,然后确认所有其他ArrayLists 的大小与第一个列表的大小匹配。所需的总时间为 O(n),其中 n 是列表的数量。

例如:

public static boolean listsHaveSameSize(List<List<?>> allLists) {
    List<?> first = null;
    for (List<?> list: allLists) {
        if (first == null) {
             first = list;
        } else if (list.size() != first.size()) {
             return false;
        }
    }
    return true;
}

希望这会有所帮助!

【讨论】:

  • 你需要小心else分支--list可以是null
  • @TedHopp- 我假设顶级列表不包含任何空列表;假设这是不合理的吗?
  • 不知道这是否不合理,但防御性编码在这里并不是一个负担。它只需要一个单独的else if (list == null) { return false; } 步骤。如果 OP 需要检查内容的一致性,那么一开始就无法 100% 控制顶级列表的内容,所以这对我来说似乎是谨慎的。顺便说一句,存储first 的大小(一旦它不是null)并使用它而不是重复调用size() 可能是个好主意。
  • @TedHopp 这真的是关于合同的,不是吗?我宁愿抛出NPE,然后在我的代码中有大量的if (...!= null)
  • @MiserableVariable - 绝对是关于合同的。有几种可能性:null 列表可以被忽略;它可以被视为一个空列表;它可以强制返回一个false 值(也许只有在至少还有一个非null 元素的情况下);它可能会抛出一个 NPE。根据上下文,其中任何一种都可能有意义。由于没有指定合同,我只是指出代码(如所写)假定了最后一种可能性。
猜你喜欢
  • 2020-04-22
  • 2015-06-02
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
相关资源
最近更新 更多