【发布时间】:2013-12-25 16:17:23
【问题描述】:
如何检查字符串列表是否同时包含某些特定字符串,而无需执行多个包含。
例如这样的:
if (templist.contains("aaa") && templist.contains("bbb")) {
}
【问题讨论】:
如何检查字符串列表是否同时包含某些特定字符串,而无需执行多个包含。
例如这样的:
if (templist.contains("aaa") && templist.contains("bbb")) {
}
【问题讨论】:
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<E> class 为基本操作 (add, remove, contains and size) 提供了恒定时间性能。由于containsAll 固有地使用contains 函数来查找元素,因此可以预期顺序为O(N+K)
【讨论】:
List 创建 HashSet 也需要更多时间和内存。所以,如果 OP 需要多次检查 containsAll,你确实是对的,否则不是。
O(N +K),其中包括从列表中创建集合的时间:O(N) 部分。 :)
您可以使用containsAll
if (templist.containsAll(Arrays.asList("aaa", "bbb"))) {
// do something
}
【讨论】: