Объясните пожалуйста, почему здесь ConcurrentModificationException ?
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Locale;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
//...
LinkedList<String> allwords = new LinkedList<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String file = reader.readLine();
file = "C:\\java\\JavaRush\\JavaRushTasks\\JavaRushTasks\\files\\2.txt";
BufferedReader filereader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));
while (filereader.ready()) {
allwords.addAll(Arrays.asList(filereader.readLine().split(" ")));
}
String[] words = allwords.toArray(new String[allwords.size()]);
StringBuilder result = getLine(words);
System.out.println(result);
}
public static StringBuilder getLine(String... words) {
if (words == null || words.length == 0) return new StringBuilder("");
StringBuilder result = new StringBuilder();
for (int i = 0; i < words.length; i++) {
LinkedList<String> wordsList = new LinkedList<>(Arrays.asList(words));
int bestCount = 0;
StringBuilder sb = new StringBuilder();
sb.append(wordsList.get(i));
int count = after1(wordsList, sb);
if (count > bestCount) {
bestCount = count;
result = sb;
}
}
return result;
}
private static int after1(LinkedList<String> wordsList, StringBuilder sb) {
int x = 0;
int size = wordsList.size();
for (int i = 0; i < size; i++) {
for (String word : wordsList
) {
String lastChar = sb.substring(sb.length() - 1, sb.length());
if (word.toLowerCase(Locale.ROOT).startsWith(lastChar.toLowerCase(Locale.ROOT))) {
sb.append(" ").append(word);
x++;
wordsList.remove(word);
}
}
}
return x;
}
}
/*
* Copyright (c) 2021. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
* Vestibulum commodo. Ut rhoncus gravida arcu.
*/
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
//...
LinkedList<String> allwords = new LinkedList<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String file = reader.readLine();
file = "C:\\java\\JavaRush\\JavaRushTasks\\JavaRushTasks\\files\\2.txt";
BufferedReader filereader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));
while (filereader.ready()) {
allwords.addAll(Arrays.asList(filereader.readLine().split(" ")));
}
String[] words = allwords.toArray(new String[allwords.size()]);
StringBuilder result = getLine(words);
System.out.println(result);
}
public static StringBuilder getLine(String... words) {
if (words == null || words.length == 0) return new StringBuilder("");
LinkedList<String> wordsList = new LinkedList<>(Arrays.asList(words));
StringBuilder sb = new StringBuilder();
Collections.sort(wordsList);
sb.append(wordsList.poll());
int size = wordsList.size();
for (int i = 0; i < size; i++) {
for (String word:wordsList
) {
String lastChar = sb.substring(sb.length() - 1, sb.length());
if (word.toLowerCase(Locale.ROOT).startsWith(lastChar.toLowerCase(Locale.ROOT))){
sb.append(" ").append(word);
wordsList.remove(word);
}
}
}
for (String word:wordsList
) {
sb.append(" ").append(word);
}
return sb;
}
}