2011-05-27 54 views
0

我想知道是否有方法在数组列表中查找重复元素。有关我想要做的更多背景,我有一个字符串的数组列表。每个字符串都包含有关MP3文件的信息。他们有一个'&'字符(例如星期五& Rebecca Black & 666)分开的标题,作曲者和跑步时间。在数组列表中查找重复元素

数组列表已根据运行时间进行了快速排序。但是,我还需要对数组列表进行排序,以便如果歌曲的运行时间相同,则应在标题上将其按字典顺序排序,如果标题相同,则应在作曲程序中进行排序。

我希望能够在arraylist中找到重复的运行时间,以便我可以使用compareTo方法根据需要按字母顺序排序。我已经实施了从整体字符串中提取相关信息的方法getTimegetTitle,getComposer。有没有一种方法可以用alphabetical这样的新方法做到这一点,或者更好的方法是我可以将它合并到我的快速排序算法中,这样我就不必再次搜索排序的数组列表了。

谢谢。

回答

7

您需要更改比较器进行排序,以便在平行(等同运行时间)的情况下查看标题和作曲者。请参阅:

java.util.Collections.sort(List list, Comparator c) 

特别是主要方法:

int compare(Object o1, Object o2) 
+0

我想过这样做,但我不确定我应该比较哪一个数组列表元素。我正在使用类似于这里提到的第一个快速排序算法:[链接](http://en.wikipedia.org/wiki/Selection_algorithm#Optimised_sorting_algorithms),但分区方法只比较我和pivotValue。 – Jigglypuff 2011-05-27 20:01:17

+0

噢,谢谢。我会研究这种方法。 – Jigglypuff 2011-05-27 20:02:40

+1

您不必担心 - 比较器只需要能够正确比较任意两个元素,包括tie-breaks;你将它提供给Collections.sort(),它为你完成所有工作。 – DNA 2011-05-27 20:02:44

2

删除重复的元素在你的名单是不是实现自己的目标的最佳途径。相反,使用Comparator(如果将有多个排序方法),或者让MP3File类实现Comparable(如果只有一个,或者明显是最好的),请查看。