各种集合的特点以及关系
- List: 对付顺序的好帮手
- 一种知道索引位置的集合;
- 可以有元素重复;
- Set: 注重独一无二的性质
- 不允许重复的集合;
- 无序
- Map: 用key来搜索的专家
- 使用成对的键值和数据值;
- key不允许重复;
- 不同key可以引用相同的value;
List中的数据如何排序
- List自己的API是没有排序的,需要借助Collectio.sort()
- 如果是内置类型,比如String,是可以直接用Collection.sort()的,但是入股是一个自定义class,需要实现Comparable;
class Song implements Compareable<Song> {
String title;
public String getTitle() {
return title;
}
public int compareTo( Song s ) {
return title.compareTo( s.getTitle() );
}
}
上述的方式,如果Song有几个属性,如果在不同的场景,需要按照不同的属性来排序,上述方法就有些无能为力了;此时可以使用Collection.sort()的带Compatator的版本
Comparator
class ArtistCompare implements Comparator<Song> {
public int compare( Song one, Song two ) {
return one.getArtist().compareTo( two.getArtist() );
}
}
ArtistCompare artistCompare = new ArtistCompare();
Collection.sort( songList, artistCompare );
避免重复数据
- 为了避免数据重复,我们需要使用Set来存储数据;
- HashSet为了检查数据重复,需要靠
hashCode()
和equls()
; - 首先使用
hashCode()
检查,如果hashCode()相等,再使用equals()
判断;所以自定义类型必须重新实现这两个function;
class Song implements Compareable<Song> {
String title;
public String getTitle() {
return title;
}
public boolean equals( Object aSong ) {
Song s = ( Song )aSong;
return getTitle().equals( s.getTitle() );
}
public int hasCode() {
return title.hashCode();
}
}
有了这样的方法重写以后,HashSet就可以无重复数据了。