head first java数据结构笔记(上)

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

你可能感兴趣的:(java,数据结构,Blog,Go)