假设我有一个ArrayList:
<string1.4>
<string2.4>
<string3.4>
当我说arrayList.containsSubString('string1')时,我希望返回arrayList的第一个元素;除了遍历arrayList
的每个元素并检查string1
是否是该元素字符串的子字符串之外,怎么办呢?
答案 0 :(得分:12)
我能想到的唯一方法是做一些事情:
strs.get(strs.indexOf(new Object() {
@Override
public boolean equals(Object obj) {
return obj.toString().contains(s);
}
}));
不知道它是否被视为良好做法。
答案 1 :(得分:5)
使用ArrayList除了迭代之外别无选择。但您可以使用其他数据结构,例如前缀树(例如ternary search tree,请参阅此java sample)。
答案 2 :(得分:1)
不能。即使有相当于List.contains()的东西,它也只是在线下进行线性搜索。
答案 3 :(得分:1)
我认为迭代列表并检查每个项目是最快的方法。它也是每个人理解你的代码的方式。 (除了构建自己的数据结构)。
无论如何,你也可以使用org.apache.commons.collections.CollectionUtils#find(Collection, Predicate)
find(java.util.Collection collection, Predicate predicate)
找到第一个 给定集合中的元素 匹配给定的谓词。
答案 4 :(得分:0)
您可以使用NavigableSet
NavigableSet<String> set = new TreeSet<String>();
// add strings
String find =
String firstMatch = set.ceiling(find);