Jukebox1.java
import java.util.*;
import java.io.*;
public class Jukebox1{
//ArrayList<String> songList=new ArrayList<String>();
//歌曲名称会存在String的ArrayList上
ArrayList<Song> songList=new ArrayList<Song>();
public static void main(String[] args){
new Jukebox1().go();
}
public void go(){
//这个方法会载入文件并列出内容
getSongs();
System.out.println(songList);
Collections.sort(songList);
System.out.println(songList);
//调用Collection静态的sort()然后再
//列出清单。第二次的输出会依照字母排序
}
void getSongs(){
try{
//File file=new File("SongList.txt");
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("/");
//split()方法会用反斜线来拆开歌曲内容
//songList.add(tokens[0]);
//因为只需要歌曲名,所以只去第一想加入SongList
Song nextSong=new Song(tokens[0],tokens[1],tokens[2],tokens[3]);
songList.add(nextSong);
//使用解析出来的4项属性来创建Song对象并加入到list中
}
}
/*
String类型的输出
[Communication, Black Dog, Dreams, Comfortably Numb, Beth, 倒退噜]
[Beth, Black Dog, Comfortably Numb, Communication, Dreams, 倒退噜]
*/
/*
sort()方法只能接受Comparable对象的list
Song不是Comparable的子型,所以无法对Song的list排序
*/
//以泛型的观点来说,extends代表extends或implement
/*
java.lang.Comparable
public interface Comparable<T>(){
int compareTo(T o);
}
比较此对象与指定对象的顺序。如果该对象小于、
等于或大于指定对象,则分别返回负整数、零或正整数。
*/
Song.java
class Song implements Comparable<Song>{
String title;
String artist;
String rating;
String bpm;
public int compareTo(Song s){
return title.compareTo(s.getTitle());
}
//实现compareTo()的方法的程序代码
//返回Song比较的结果
Song(String t, String a, String r, String b){
title=t;
artist=a;
rating=r;
bpm=b;
}
public String getTitle(){
return title;
}
public String getArtist(){
return artist;
}
public String getRating(){
return rating;
}
public String getBpm(){
return bpm;
}
public String toString(){
return title;
}
//重写toStinr()方法
}
SongListMore.txt ; SongList.txt 包含每行的前两项
Communication/The Cardigans/5/80
Black Dog/Led Zeppelin/4/84
Dreams/Van Halen/6/120
Comfortably Numb/Pink Floyd/5/110
Beth/Kiss/4/100
倒退噜/黄克林/5/90
ArrayList不是唯一的集合
虽然ArrayList会是最常用的,但偶尔还是会有特殊情况。
下面列出几个较为重要的
★TreeSet
以有序状态保持并可防止重复
★HashMap
可用成对的name/value来保存与取出
★LinkedList
针对经常插入或删除中间元素所设计的高效率集合
(实际上ArrayList还是比较实用)
★HashSet
防止重复的集合,可快速地找寻相符的元素
★LinkedHashMap
类似HashMap,但可记住元素插入的顺序,也可以
设定成依照元素上次存取的先后来排序。
Comparator排序的使用
http://keating.iteye.com/blog/258987