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

各种集合的特点以及关系

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值