Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ArrayList中查找字符串索引的更快方法_Java_List_Indexof - Fatal编程技术网

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”的第一个元素.看看这个
有没有更快的方法来做这件事?
这意味着他想要更快的方法而不是更干净的方法来做这件事。明白了,但在我回答的开头,我声明,根据定义,没有更快的方法。有更快的方法吗?这意味着他想要更快的方法,而不是更干净的方法。明白,但在我回答的开头,我声明,根据定义,没有更快的方法。