您的位置:首页 > 编程语言 > Java开发

[Java]集合中数据排序与避免重复

2017-07-05 15:05 316 查看

各种集合的特点以及关系

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就可以无重复数据了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐