Java 在ArrayList中查找字符串索引的更快方法
所以我有这样的想法:Java 在ArrayList中查找字符串索引的更快方法,java,list,indexof,Java,List,Indexof,所以我有这样的想法: List<String> test = new ArrayList<String>(); 我想搜索“E”的示例索引。我是这样做的: for (String a : test) { if(a.contains("E")) { System.out.println(test.indexOf(a)); } } 有没有更快的方法?因为现在我总是在所有列表中选择“for”。如果你说你想在列表中找到第一个包含“E”的项目,根据定义,你
List<String> test = new ArrayList<String>();
我想搜索“E”的示例索引。我是这样做的:
for (String a : test) {
if(a.contains("E")) {
System.out.println(test.indexOf(a));
}
}
有没有更快的方法?因为现在我总是在所有列表中选择“for”。如果你说你想在列表中找到第一个包含“E”的项目,根据定义,你必须循环检查每个项目,直到找到匹配项为止-这可能在列表的末尾,所以在最坏的情况下,你仍然必须搜索整个列表 但是,您可以采取的一种快捷方式是,在找到感兴趣的循环后,至少退出循环:
for (String a : test) {
if(a.contains("E")) {
System.out.println(test.indexOf(a));
break;
}
}
如果要搜索完整的字符串(例如“ABC”),可以使用indexOf
,但在搜索部分匹配项时,不能这样做
Java 8语法虽然不太可能提高性能或用更少的代码行执行操作,但可以说更具可读性,并允许您将其他流操作链接起来,以执行与查询匹配的项所需的任何操作:
List<String> list = Arrays.asList("ABC", "DEF", "GHI", "JKL");
Optional<String> matchingItem = list.stream()
.filter(s -> s.contains("E"))
.findFirst();
matchingItem.ifPresent(s -> System.out.println(list.indexOf(s)));
如果你说你想在列表中找到第一个包含“E”的项目,根据定义,你必须循环检查每个项目,直到找到匹配项为止-这可能在列表的末尾,因此在最坏的情况下,你仍然必须搜索整个列表 但是,您可以采取的一种快捷方式是,在找到感兴趣的循环后,至少退出循环:
for (String a : test) {
if(a.contains("E")) {
System.out.println(test.indexOf(a));
break;
}
}
如果要搜索完整的字符串(例如“ABC”),可以使用indexOf
,但在搜索部分匹配项时,不能这样做
Java 8语法虽然不太可能提高性能或用更少的代码行执行操作,但可以说更具可读性,并允许您将其他流操作链接起来,以执行与查询匹配的项所需的任何操作:
List<String> list = Arrays.asList("ABC", "DEF", "GHI", "JKL");
Optional<String> matchingItem = list.stream()
.filter(s -> s.contains("E"))
.findFirst();
matchingItem.ifPresent(s -> System.out.println(list.indexOf(s)));
您可以使用置换索引,通常用于单词:
["he speaks well", "well done"]
将给出一个排序列表
well *done*
*he* speaks well
he *speaks* well
he speaks *well*
*well* done
在那里你可以很快找到“井”
在我们的案例中,这样的列表条目是:
class Entry implements Comparable<Entry> {
String right;
String left;
@Override
public String toString() { return left + "^" + right; }
}
您可以使用置换索引,通常用于单词:
["he speaks well", "well done"]
将给出一个排序列表
well *done*
*he* speaks well
he *speaks* well
he speaks *well*
*well* done
在那里你可以很快找到“井”
在我们的案例中,这样的列表条目是:
class Entry implements Comparable<Entry> {
String right;
String left;
@Override
public String toString() { return left + "^" + right; }
}
如果只需要包含字母“E”的第一个元素的索引,则只需使用
String#indexOf(char)
即可节省一次操作。找到元素后,就可以打破循环
List<String> test = Arrays.asList("ABC", "DEF", "GHI", "JKL");
for (String element : test) {
int idx = element.indexOf('E');
if (idx != -1) {
System.out.println(element + " with 'E' at pos: " + idx);
break;
}
}
List test=Arrays.asList(“ABC”、“DEF”、“GHI”、“JKL”);
for(字符串元素:test){
int idx=element.indexOf('E');
如果(idx!=-1){
系统输出打印项次(元素+”,位置为“+idx”,带“E”);
打破
}
}
如果只需要包含字母“E”的第一个元素的索引,则只需使用字符串#indexOf(char)
即可节省一次操作。找到元素后,就可以打破循环
List<String> test = Arrays.asList("ABC", "DEF", "GHI", "JKL");
for (String element : test) {
int idx = element.indexOf('E');
if (idx != -1) {
System.out.println(element + " with 'E' at pos: " + idx);
break;
}
}
List test=Arrays.asList(“ABC”、“DEF”、“GHI”、“JKL”);
for(字符串元素:test){
int idx=element.indexOf('E');
如果(idx!=-1){
系统输出打印项次(元素+”,位置为“+idx”,带“E”);
打破
}
}
列表是否有序?是否要查找数组列表中包含“E”的所有项目,还是仅查找第一个项目?是否可以更改保存数据的结构-例如,不是数组列表,而是包含键的地图-英语字母表中的26个字母?是的,我只需要包含“E”的第一个元素.看一看这是按顺序排列的列表吗?你想在数组列表中找到所有包含“E”的项目,还是只找到第一个?你能改变保存数据的结构吗?例如,不是数组列表,而是一个带键的地图-英语字母表中的26个字母?是的,我只需要包含“E”的第一个元素.看看这个有没有更快的方法来做这件事?
这意味着他想要更快的方法而不是更干净的方法来做这件事。明白了,但在我回答的开头,我声明,根据定义,没有更快的方法。有更快的方法吗?这意味着他想要更快的方法,而不是更干净的方法。明白,但在我回答的开头,我声明,根据定义,没有更快的方法。