Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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中的字符串';s长度_Java_String_Loops_Arraylist_String Length - Fatal编程技术网

Java 如何扫描ArrayList中的字符串';s长度

Java 如何扫描ArrayList中的字符串';s长度,java,string,loops,arraylist,string-length,Java,String,Loops,Arraylist,String Length,我有一个按长度排序的字符串数组列表。我需要比较长度相同的字符串 例如,假设列表: [“我的”、“我的”、“他”、“她”、“太阳”、“汽车”] 我只需要将“我的”与“他”,“她”与“太阳”和“汽车”进行比较 例如,在这段代码中,所有字符串都相互比较。相反,我想比较由于计算问题而产生的桶。谢谢大家 对于(int i=0;i您可以添加字符串长度检查: for (int i = 0; i < strings.size() - 1; i++) { String a = strings.get

我有一个按长度排序的字符串数组列表。我需要比较长度相同的字符串

例如,假设列表:

[“我的”、“我的”、“他”、“她”、“太阳”、“汽车”]

我只需要将
“我的”
“他”
“她”
“太阳”
“汽车”
进行比较

例如,在这段代码中,所有字符串都相互比较。相反,我想比较由于计算问题而产生的桶。谢谢大家


对于(int i=0;i您可以添加字符串长度检查:

for (int i = 0; i < strings.size() - 1; i++) {
    String a = strings.get(i);
    for (int j = i + 1; j < strings.size(); j++) {
        String b = strings.get(j);
        if (a.length() == b.length()) {
            System.out.println(a.compareTo(b));
        }     
    }
}
for(int i=0;i
这里的一个巨大优势是,列表已经按增加的长度排序。如果不是,则只需先按长度排序,然后在此处应用所需的操作。或者,如果不想按长度排序,则在下面的示例中,将
中断
更改为
继续

假设您有一个排序列表,那么主要的事情就是添加一个检查,确保要比较的第一个字符串的长度与要比较的第二个字符串的长度相匹配。如果它们的长度不匹配,那么您可以直接转到外部循环中的下一个单词,因为您将保证看到所有长度相同的单词y、 由于列表已排序:

for(int i = 0; i<strings.size()-1; i++) {
  for (int j = i+1; j<strings.size(); j++) {
    if (strings.get(i).length() != strings.get(j).length()) break;
    System.out.println(strings.get(i).compareTo(strings.get(j)));   
  }
}

for(int i=0;i您还可以使用Java流API的
收集器#partitioning by
基于特定属性创建bucket

Map<Integer, List<String>> map = yourList.stream()
    .collect(Collectors.partitioningBy(String::length));
Map Map=yourList.stream()
.collect(收集器.partitionBy(字符串::长度));
然后,您可以通过提供大小来处理每个桶:

int length = 3;
List<String> bucket = map.get(length);
int-length=3;
List bucket=map.get(长度);

您可以简单地首先将列表拆分为具有相同长度的字符串的组/分区。一旦创建了组/分区,您就可以简单地运行上面给出的代码。在这种情况下,最差的时间复杂度仍然是O(n^2),但在其他情况下它会得到改进。在最佳情况下,它将是O(n)下面的代码将给出我的想法。我正在使用Java Streams API中的groupingBy方法

List<String> list = new ArrayList<>();

list.add("me");
list.add("by");
list.add("he");
list.add("she");
list.add("sun");
list.add("car");

Map<Integer, List<String>> mapOfSameLengthStrings = list
            .stream()
            .collect(Collectors.groupingBy(String::length));

for (Map.Entry<Integer,List<String>> entry : mapOfSameLengthStrings.entrySet()) {
    List<String> listOfSameLengthStrings = entry.getValue();
    for(int i = 0; i<listOfSameLengthStrings.size()-1; i++) {
        for (int j = i+1; j<listOfSameLengthStrings.size();j++) {
                System.out.println(listOfSameLengthStrings.get(i).compareTo(listOfSameLengthStrings.get(j)));
        }
    }
}

根据我对查询的理解,它会进行6次比较,这是您需要的。希望能有所帮助。

如果您的列表很小,您所做的一切都很好,只需添加长度测试,如Mureinik的答案所建议的。但是,如果您的列表很大,您应该重新考虑您的数据结构。您可能需要列表的哈希表,w这里的关键是列表中字符串的大小和列表本身的值。谢谢,我尝试了这个解决方案,效果很好。Bye@LorenzoAlighieri不客气,很乐意提供帮助。如果您同意,您可以将此答案标记为已接受吗?这有利于我们作为堆栈溢出的“新贡献者”的声誉:)
11
5
-6
-13
16
16