Pac*_*hun 2 java sorting algorithm collections
我有一个歌曲的Arraylist存储标题,艺术家和时间我写了我的所有代码和一切.我只是想了解更多关于Collection.sort和Collection.reverse以及Collection.reverseOrder的信息.我有一个包含所有歌曲和所有内容的文件.我想根据时间按降序排序歌曲.
当我尝试这个时,我得到一个错误或它没有正确排序.任何人都可以建议我如何使用Collection.sort并使用比较器
Comparator<Song> comparator = Collections.reverseOrder();
Collections.reverse(listOfSongs);
Run Code Online (Sandbox Code Playgroud)
我的比较方法如下:
public int compare(Song mySong1,Song mySong2 ){
if (mySong1.getLength() > mySong2.getLength()){
return -1;
}
if(mySong1.getLength() < mySong2.getLength()){
return 1;
}
if(mySong1.getLength() == mySong2.getLength())
{
if(mySong1.getTitle().compareTo(mySong2.getTitle()) > 0){
return -1;
}
if(mySong1.getTitle().compareTo(mySong2.getTitle()) < 0 ){
return 1;
}
else {
if(mySong1.getComposer().compareTo(mySong2.getComposer()) >0){
return -1;
}
if(mySong1.getComposer().compareTo(mySong2.getComposer()) <0) {
return 1;
}
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Collections.reverse
不排序.它只是颠倒了列表元素的顺序.因此,如果列表包含T, F, Z
,它将包含Z, F, T
.
您的代码片段初始化比较器,但不对其执行任何操作.并且这个比较器只能像javadoc所说的那样工作,如果集合的元素实现了Comparable
接口.
您应该让Song
类实现Comparable
接口(查看其javadoc以了解此接口必须执行的操作),或者您必须使用特定的Comparator
实现.无论选择何种解决方案,您都必须实现一些代码来Collections.sort
说明歌曲如何相互比较.当它的标题出现在另一首歌的标题之前时,是否还有另一首歌?或者是它的持续时间比另一个短?
归档时间: |
|
查看次数: |
21830 次 |
最近记录: |