假设我有一个数组列表:
<string1.4> <string2.4> <string3.4>
并且我希望返回ArrayList中包含“string1”作为其字符串一部分的第一个元素。例如:
arrayList.containsSubString('string1');
除了遍历ArrayList中的每个元素并检查“string1”是否是该元素的字符串的子字符串之外,还能怎么做呢?
ilmyapht1#
我唯一能想到的方法就是做这样的事情:
strs.get(strs.indexOf(new Object() { @Override public boolean equals(Object obj) { return obj.toString().contains(s); } }));
我不知道这是否被认为是一种好的做法。
xsuvu9jc2#
对于ArrayList,除了遍历它之外没有其他选择。但是你可以使用其他数据结构,比如前缀树(例如ternary search tree,参见java sample)。
myzjeezk3#
我认为遍历列表并检查每一项是最快的方法。这也是每个人理解你的代码的方式。(除了构建自己的数据结构)。无论如何,您也可以使用org.apache.commons.collections.CollectionUtils#find(Collection, Predicate)find(java.util.Collection collection, Predicate predicate)查找给定集合中与给定 predicate 匹配的第一个元素。
org.apache.commons.collections.CollectionUtils#find(Collection, Predicate)
find(java.util.Collection collection, Predicate predicate)
tv6aics14#
不能。即使有List.contains()的等价物,它也只是在引擎盖下进行线性搜索。
p5cysglq5#
您可以使用NavigableSet
NavigableSet<String> set = new TreeSet<String>(); // add strings String find = String firstMatch = set.ceiling(find);
5条答案
按热度按时间ilmyapht1#
我唯一能想到的方法就是做这样的事情:
我不知道这是否被认为是一种好的做法。
xsuvu9jc2#
对于ArrayList,除了遍历它之外没有其他选择。但是你可以使用其他数据结构,比如前缀树(例如ternary search tree,参见java sample)。
myzjeezk3#
我认为遍历列表并检查每一项是最快的方法。这也是每个人理解你的代码的方式。(除了构建自己的数据结构)。
无论如何,您也可以使用
org.apache.commons.collections.CollectionUtils#find(Collection, Predicate)
find(java.util.Collection collection, Predicate predicate)
查找给定集合中与给定 predicate 匹配的第一个元素。tv6aics14#
不能。即使有List.contains()的等价物,它也只是在引擎盖下进行线性搜索。
p5cysglq5#
您可以使用NavigableSet