六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 50|回复: 0

Comparator排序的使用 来自head first java

[复制链接]

升级  22.67%

22

主题

22

主题

22

主题

秀才

Rank: 2

积分
84
 楼主| 发表于 2013-1-27 04:51:14 | 显示全部楼层 |阅读模式
import java.util.*;import java.io.*;public class Jukebox5{  ArrayList<Song> songList=new ArrayList<Song>();  public static void main(String[] args){    new Jukebox5().go();  }  class ArtistCompare implements Comparator<Song>  {  public int compare(Song one,Song two){     return one.getArtist().compareTo(two.getArtist());  }  }  class RatingCompare implements Comparator<Song>  {  public int compare(Song one,Song two){     return one.getRating().compareTo(two.getRating());  }  }  //Comparator类多好,想按什么排序就按什么排序  //用sort(List o)以及实现compareTo()就不行喽  public void go(){    getSongs();    System.out.println(songList);    //Collections.sort(songList);//System.out.println(songList);    //这个排序现在仍然可以用    ArtistCompare artistCompare=new ArtistCompare();Collections.sort(songList,artistCompare);System.out.println(songList);RatingCompare ratingCompare=new RatingCompare();Collections.sort(songList,ratingCompare);System.out.println(songList);  }  void getSongs(){    try{  File file=new File("SongListMore.txt");  BufferedReader reader=new BufferedReader(new FileReader(file));  String line=null;  while((line=reader.readLine())!=null){    addSong(line);  }}catch(Exception ex){  ex.printStackTrace();}  }  void addSong(String lineToParse){    String[] tokens=lineToParse.split("/");Song nextSong=new Song(tokens[0],tokens[1],tokens[2],tokens[3]);songList.add(nextSong);  }}/*☆调用单一参数的sort(List o)方法代表由list元素上的compareTo()方法来决定顺序。因此元素必须要实现Comparable这个几口。☆调用sort(list o,Comparator c)方法代表不会调用list元素的compareTo()方法,而会使用Comparator的commpare()方法。这意味着list元素不需要实现Comparable。*/
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表