【问题标题】:Convenient method to check if a list contains multiple elements检查列表是否包含多个元素的便捷方法
【发布时间】:2013-12-25 16:17:23
【问题描述】:

如何检查字符串列表是否同时包含某些特定字符串,而无需执行多个包含。

例如这样的:

if (templist.contains("aaa") && templist.contains("bbb")) {

}

【问题讨论】:

    标签: java string list


    【解决方案1】:

    List.containsAll函数其实可以达到你的要求。但是,将containsAll 与列表类型一起使用会降低性能,因为顺序为O(NK),其中N 是列表元素的数量,K 是目标字符串的数量。尝试使用 HashSet 来提高性能:

       HashSet<String>set = new HashSet<>(list);
       if(set.containsAll(Arrays.asList("asd", "efg")))
            // do my job; 
    

    因为,HashSet&lt;E&gt; class 为基本操作 (add, remove, contains and size) 提供了恒定时间性能。由于containsAll 固有地使用contains 函数来查找元素,因此可以预期顺序为O(N+K)

    【讨论】:

    • 正确点,但不要忘记从第一个 List 创建 HashSet 也需要更多时间和内存。所以,如果 OP 需要多次检查 containsAll,你确实是对的,否则不是。
    • @Alex,我提到的顺序是O(N +K),其中包括从列表中创建集合的时间:O(N) 部分。 :)
    • 没错,我看错了你的答案。实际上,一个简单的基准测试表明,从第一个列表创建一个 HashSet 并检查 containsAll 对于第一次调用显然更长,然后速度更快。
    【解决方案2】:

    您可以使用containsAll

    if (templist.containsAll(Arrays.asList("aaa", "bbb"))) {
        // do something
    }
    

    【讨论】:

    猜你喜欢
    • 2018-11-17
    • 2014-07-31
    • 2022-09-23
    • 1970-01-01
    • 2021-06-24
    • 2012-08-01
    • 2012-04-18
    • 2021-03-02
    相关资源
    最近更新 更多