set集合

Set集合中的对象不按特定的方式排序,只是简单地把对象加入集合中,但Set集合中不能包含重复对象。Set集合由Set接口和Set接口的实现类组成。Set接口继承了Collection接口,因此包含Collection接口的所有方法。误区警示Set集合的构造有一个约束条件,传入的Collection对象不能有重复值,必须小心操作可变对象(Mutable Object)。如果一个Set集合中的可变元素改变了自身状态导致Object.equals(Object) =true,则会出现一些问题。

Set接口常用的实现类有HashSet类与TreeSet类,

HashSet类实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证Set集合的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用null元素。

TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口,因此TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。TreeSet类新增的方法

package test;

import java.util.Iterator;
import java.util.TreeSet;

public class a {
    public static void main(String[] args) {
        Goods g2=new Goods(2,"er");
        Goods g1=new Goods(1,"yi");
        Goods g3=new Goods(3,"san");
        TreeSet<Goods> tg=new TreeSet<>();
        tg.add(g1);
        tg.add(g2);
        tg.add(g3);
        Iterator<Goods> ig= tg.iterator();
        //遍历
        while (ig.hasNext()){
            Goods g=ig.next();
            System.out.println(g.getId()+" "+g.getName());
        }
        System.out.println("第一个元素:"+tg.first().getId()+
        " 第二个元素:"+tg.last().getId());
        System.out.println("返回比较器:"+tg.comparator());
        //包左不包右
        System.out.println("g2前的元素");
        ig=tg.headSet(g2).iterator();
        while (ig.hasNext()){
            System.out.println(ig.next().getId()+" ");
        }
        System.out.println("g2与g3间的元素");
        ig=tg.subSet(g2,g3).iterator();
        while (ig.hasNext()){
            System.out.print(ig.next().getId()+" ");
        }
    }

//comparable接口
public class Goods implements Comparable{
    private int id;
    private String name;

    public Goods(){

    }
    public Goods(int id, String name) {
        this.id=id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    @Override
    public int compareTo(Object o) {
        Goods g=(Goods) o;
        return this.id-g.getId();
    }
}

}
1 yi
2 er
3 san
第一个元素:1 第二个元素:3
返回比较器:null
g2前的元素
1 
g2与g3间的元素
2 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值