Java数据结构与排序
一、引子:想要给ArrayList排序却发现没有排序方法?你有两种选择:
1、换用TreeSet;
2、使用Collection.sort(List<T> list) / Collection.sort(List<T> list, Comparator<? super T> c)方法。
二、展开分析Java的几种主要数据结构及其排序方法:
LinkedList | 高效操作元素 |
TreeSet | 不重复,有序 |
HashSet | 不重复,快速查找 |
HashMap | NVP(key不能重复),按Hash算法来存储,取出与存入顺序常常不一致 |
LinkedHashMap | NVP(key不能重复),可记住元素插入的顺序,取出与存入顺序一致 |
PS: HashSet<T>.addAll(ArrayList<T>) 可以这样将所有的元素加进去
三、类型参数与泛型
1 public class ArrayList<E> extends AbstractList<E>{
2 public boolean add( E o){
3 ......
4 }
5 }
1 public <T extends Animal> void takeThing(ArrayList<T> list){
2 .....
3 }
1 public void takeThing(ArrayList<? extends Animal> animals){
2 .....
3 }
1 public void takeThing(ArrayList<Animal> list){
2 .....
3 }
四、使用Collections.sort(List<T> list)方法
1 ArrayList<String> songList = new ArrayList<String>(); 2 Collections.sort(songList);
1 public int compareTo( Song s ){ 2 return title.compareTo( s.getTitle() ); 3 }
1 //内部类 2 class ArtistCompare implements Comparator<Song>{ 3 public int compare(Song one, Song two){ 4 return one.getArtist() . compareTo( two. getArtist()); 5 } 6 } 7 ArtistCompare artistCompare = new ArtsitCompare(); 8 Collections.sort(songList, artistCompare);
六、想一想,拿着两个对象,有那么多可以比较的方面,你比那个?所以:你以为对象的比较那么简单?
1 class Song implements Comparable<Song>{
2 private String title;
3 public boolean equals(Object o){
4 Song s = (Song) o;
5 return getTitle().equals(s.getTitle);
6 }
7 public int hashCode(){
8 return getTitle().hashCode();
9 }
10 public String getTitle(){
11 return this.title;
12 }
13 }
七、在介绍了上面对象之间如何比较后,还记得开头提到可以提到ArrayList的Treeset么?
1 TreeSet<Book> tree = new TreeSet<Book>(bCompare); //bCompare是实现了Comparator接口类的一个对象
八、Map键值对的取得方式
1、传统方法1(转成set后取得)
2、传统方法2(转成set后取得)
3、增强for循环(推荐, jdk1.5以后可使用)
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。