Поиск дубликатов элементов в массиве
Мне было интересно, есть ли способ найти дубликаты элементов в массиве. Для большего контекста того, что я пытаюсь сделать, у меня есть массив строк. Каждая строка содержит информацию о файле MP3. У них есть название, композитор и время исполнения, разделенные символом "&" (например, Friday&Rebecca Black&666).
Arraylist уже был quicksorted согласно времени выполнения. Тем не менее, мне также нужно отсортировать arraylist так, чтобы, если время исполнения для песен было одинаковым, они были приведены в лексикографическом порядке в заголовке, а затем в композиторе, если заголовки также равны.
Я хочу быть в состоянии найти дубликаты времени выполнения в массиве, чтобы я мог использовать compareTo
метод сортировки по алфавиту, как мне нужно. Я уже реализовал методы getTime
, getTitle
, getComposer
которые извлекают соответствующую информацию из общих строк. Есть ли способ, которым я мог бы сделать это в новом методе, таком как alphabetical
или, что еще лучше, есть ли способ, которым я мог бы включить его в алгоритм быстрой сортировки, чтобы мне больше не приходилось искать в отсортированном массиве?
Благодарю.
2 ответа
Вам нужно изменить компаратор для своего вида, чтобы в случае связи (равного времени выполнения) он смотрел на заголовок и композитора. Увидеть:
java.util.Collections.sort(List list, Comparator c)
особенно основной метод:
int compare(Object o1, Object o2)
Удаление повторяющихся элементов в вашем списке - не лучший способ достижения вашей цели. Вместо этого рассмотрите возможность использования либо Comparator (если будет несколько методов сортировки), либо использования вашего класса MP3File Comparable (если есть только один или явно лучший).