Поиск дубликатов элементов в массиве

Мне было интересно, есть ли способ найти дубликаты элементов в массиве. Для большего контекста того, что я пытаюсь сделать, у меня есть массив строк. Каждая строка содержит информацию о файле 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 (если есть только один или явно лучший).

Другие вопросы по тегам