集合与泛型

  • 常用集合
  1. ArrayList:基于动态数组的数据结构,随机访问时效率高
  2. TreeSet:以有序状态保持并可防止重复
  3. HashMap:可用成对的name/value来保存与取出
  4. LinkedList:针对经常插入或删除中间元素所设计的高效率的集合
  5. HashSet:防止重复的集合,可快速地找寻相符的元素
  6. LinkedHashMap:类似于HashMap,但可记住元素插入的顺序

可以使用TreeSet或Collections.sort()来实现数组元素按字母序排序
toString()方法定义在Object类中,java中每个类都有继承到,而且对象被System.out.println(对象)是调用类中的toString()方法

public <T extends Animal> void takeThing(ArrayList<T> list);//只要T是Animal及它的子类都可以调用这个方法
public void takeThing(ArrayList<Animal> list);//只有T是Animal类才可以调用这个方法
public void takeThing(ArrayList<? extends Animal> list);//万用类型,与第一行代码相同,extends同时表示继承和实现
  • 如何对Song对象排序
    • 第一种方法sort(List o)
  1. sort()不能对对象进行排序,sort()方法只接受Comparable对象的list
  2. Song类必须实现Comparable接口
  3. 只需覆盖compareTo(T o)方法,重点在于两个Song是如何比出大小的
class Song implements Comparable<Song>{
    String title;
    String artist;
    public int compareTo(Song s){
        return title.compareTo(s.getTitle());//调用String本身的compareTo方法
    }
    public String getTitle(){
        return title;
    }
    public String getArtist(){
        return artist;
    }
}
  • 第二种方法sort(List o,Comparator c)
  1. sort()有重载的版本,取用Comparator参数,不需要实现Comparable
  2. 创建并实现Comparator的内部类,以compare方法取代compareTo()
  3. 制作该类的实例,将参数传入
class ArtistCompare implements Comparator<Song>{
    public int compare(Song a,Song b){
        return a.getArtist().compareTo(b.getArtist());
    }
}
//部分代码
ArtistCompare artistCompare=new ArtistCompare();
Collections.sort(songList,artistCompare);
  • 使用HashSet时如何判断对象相等
  1. 引用相等性:堆上同一对象的两个引用(相同的hashcode),对象相等性:堆上的两个不同对象在意义上相同的(有相同的hashcode和两个对象之间的equals()返回true)
  2. 要让HashSet能正确地判断对象是否重复,就必须符合对象相等性,覆盖hashCode()与equals()方法
//相同的title则视为相同对象
public boolean equals(Object aSong){
    Song s=(Song)aSong;
    return title.equals(s.getTitle());
} 
public int hashCode(){
    return title.hashCode();
}
  • 使用TreeSet对Song对象排序
  1. 让Song类实现Comparable接口,覆盖compareTo()方法
  2. 使用重载、取用Comparator参数的构造函数来创建TreeSet
public class ArtistCompare implements Comparator<Song>{
    public int compare(Song a,Song b){
        return (a.getArtist().compareTo(b.getArtist()));
    }
}
//部分代码
ArtistCompare artistCompare=new ArtistCompare();
TreeSet<Song> tree=new TreeSet<Book>(artistCompare);
  • Map的使用
public class TestMap{
    public static void main(String[] args){
        HashMap<String,Integer> scores=new HashMap<String,Integer>();
        scores.put("Tom",60);
        System.out.println(scores.get("Tom"));        
    }
}




posted @ 2018-12-21 14:09  liaoxuefan  阅读(138)  评论(0编辑  收藏  举报