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

来源:互联网 发布:暗黑2 1.13 完美 mac 编辑:程序博客网 时间:2024/06/07 02:47

各种集合的特点以及关系

  • 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就可以无重复数据了。

原创粉丝点击