Рассмотрим случай со списком строк Пример: list = ['apple', 'bat', 'cow,' dog ',' applebat ',' cowbat ',' dogbark ',' help ']java- удаление подстроки в списке строк
Код java должен проверить, не является ли какой-либо элемент строки подмножеством другого элемента, и если он больше, то строковый элемент должен быть удален.
так что в этом случае струнные «апплеты», «ковбой», «собака» удаляются.
Подход, который я взял был взять два списка и перебирать их следующим образом,
ArrayList<String> list1 = new ArrayList<String>(strings);
ArrayList<String> list2 = new ArrayList<String>(strings);
for(int i = 0; i<list1.size();i++)
{
String curr1 = list1.get(i);
for(int j = 0;j<list2.size();j++)
{
String curr2 = list2.get(j);
if(curr2.contains(curr1)&&!curr2.equals(curr1))
{
list2.remove(j);
j--;
}
}
}
ВАЖНО У меня есть списки с размерами 200К до 400К elements.I хотели бы найти способ улучшить производительность. Я даже пробовал хэшсеты, но они не очень помогли. Я сталкиваюсь с проблемами с временем, затраченным программой.
Может ли кто-нибудь предложить какие-либо улучшения в моем коде или какие-либо другие подходы в java для повышения производительности?
Я думаю, что вы не можете просто удалить их при переборе , Что вы можете сделать, это принять отрицательное условие, а затем добавить его в другой массивList –
Попробовать 'HashSet' и проверить с помощью' contains' и удалить методы 'remove'.' Set' даст нам 'O (1)' (гипотетическое) время выполнения. –
Я пробовал на небольшом наборе строк, и код был в порядке, но когда список становится очень большим, он занимает много времени, чтобы обрабатывать, я не хочу повторять его n раз n раз в двух списках. Я хотел бы динамически сократить два списка, чтобы я мог удалить множество сравнений. –