Я работаю над программой, которая использует ArrayList
для хранения Strings
. Программа предлагает пользователю меню и позволяет пользователю выбрать операцию для выполнения. Такими операциями являются добавление строк в список, печать записей и т. Д. Я хочу создать метод с именем removeDuplicates()
. Этот метод будет искать ArrayList
и удалять все дублированные значения. Я хочу оставить один экземпляр дублирующихся значений в списке. Я также хочу, чтобы этот метод возвращал общее количество удаленных дубликатов.
Я пытался использовать вложенные циклы для достижения этой цели, но у меня возникли проблемы, потому что, когда записи удаляются, индексация ArrayList
изменяется, и все работает не так, как должно. Я концептуально знаю, что мне нужно делать, но у меня возникают проблемы при реализации этой идеи в коде.
Вот некоторый псевдокод:
начать с первой записи;
проверьте каждую последующую запись в списке и посмотрите, соответствует ли она первой записи;
удалить каждую последующую запись в списке, соответствующую первой записи;
после изучения всех записей переходите ко второй записи;
проверьте каждую запись в списке и посмотрите, соответствует ли она второй записи;
удалить каждую запись в списке, которая соответствует второй записи;
повторить для записи в списке
Вот код, который у меня есть:
public int removeDuplicates()
{
int duplicates = 0;
for ( int i = 0; i < strings.size(); i++ )
{
for ( int j = 0; j < strings.size(); j++ )
{
if ( i == j )
{
// i & j refer to same entry so do nothing
}
else if ( strings.get( j ).equals( strings.get( i ) ) )
{
strings.remove( j );
duplicates++;
}
}
}
return duplicates;
}
ОБНОВЛЕНИЕ : Похоже, что Уилл ищет решение домашней работы, которое включает разработку алгоритма удаления дубликатов, а не прагматическое решение с использованием наборов. Смотрите его комментарий:
Спасибо за предложения. Это часть задания, и я считаю, что учитель намеревался, чтобы решение не включало наборы. Другими словами, я должен предложить решение, которое будет искать и удалять дубликаты без реализации HashSet
. Учитель предложил использовать вложенные циклы, что я и пытаюсь сделать, но у меня были некоторые проблемы с индексированием ArrayList
после удаления некоторых записей.