У меня есть связанный список с некоторыми элементами.Как искать элементы 'n' впереди, итерации через список java?
{ (?i), \\d+, \\., \\d+, (?i), \\d+, \\. }
Теперь, в то время как итерации, мне нужно выяснить, если три последовательных значения "\\d+", "\\.", "\\d+"
, если да, то мне нужно, чтобы объединить их в один узел со значением "\\d+\\.\\d+"
. Итак, мой предыдущий список должен выглядеть следующим образом после указанной операции.
{(?i), \\d+\\.\\d+, (?i), \\d+, \\.}
Но, как Java не разоблачение связан внутренний класс узла Листом не существует никакого способа для меня, чтобы смотреть вперед более одного узла одновременно. Я мог бы заставить его работать со следующим кодом, но он выглядит уродливым для меня. Мне интересно, есть ли какой-либо чистый способ добиться того же.
LinkedList<String> l = new LinkedList<>(); //this can be ArrayList aswell.
l.add("(?i)");
l.add("\\d+");
l.add("\\.");
l.add("\\d+");
l.add("(?i)");
l.add("\\d+");
l.add("\\.");
System.out.println(l.toString());
List<Integer> indexesToBeRemoved = new ArrayList<>();
for (int i = 0; i < l.size(); i++) {
int j = i;
if ("\\d+".equals(l.get(j))) {
j++;
if (j < l.size() && "\\.".equals(l.get(j))) {
j++;
if (j < l.size() && "\\d+".equals(l.get(j))) {
l.set(i, "\\d+\\.\\d+");
indexesToBeRemoved.add(j);
indexesToBeRemoved.add(--j);
}
}
}
}
for (int i : indexesToBeRemoved) {
l.remove(i);
}
System.out.println(l.toString());
O/P:
[(?i), \d+, \., \d+, (?i), \d+, \.]
[(?i), \d+\.\d+, (?i), \d+, \.]
Невозможно использовать ArrayList? Потому что вы идете с индексированием – SacJn
@SacJn Не имеет значения. LinkedList также имеет индексирование. – geekprogrammer
Да, он имеет индексирование, но не эффективен, как ArrayList. Таким образом, любая операция на LinkedList потребляет гораздо больше времени, чем его счетная часть – SacJn