Set集合

   Set集合中的对象不按特的定的方式排序,只是简单地把对象加入集合中,但Set集合中不能包含重复对象.Set集合由Set接口和Set接口的实现类组成.Set接口继承了Collection接口,因此包含Collection接口的所有方法.

  注意:

    set的构造有一个条件约束,传入的Collection对象不能有重复值,必须小心操作可变对象(Mutable Object).如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true,则会出现一些问题

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

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

    

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

 

  例1

  在项目中创建类UpdateStu,实现Comparable接口,重写该接口中的compareTo()方法.在主方法中创建UpdateStu对象,创建集合,并将UpdatrStu对象添加到集合中.遍历该集合中的全部元素,以及通过headSet(),subSet()方法获得全部集合.

  

package Set;

import java.util.*;

public class UpdateStu implements Comparable<Object> {      // 创建类实现Comparable接口
    String name;
    long id;

    public UpdateStu(String name, long id) {                // 构造方法
        super();
        this.name = name;
        this.id = id;
    }

    public int compareTo(Object o) {
        UpdateStu upStu = (UpdateStu) o;
        int result = id > upStu.id ? 1 : (id == upStu.id ? 0 : -1);// 参照代码说明
        return result;
    }

    public String getName() {
        return name;
    }

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

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public static void main(String[] args) {
        UpdateStu stu1 = new UpdateStu("赵", 01011);
        UpdateStu stu2 = new UpdateStu("钱", 01015);         // 创建UpdateStu对象
        UpdateStu stu3 = new UpdateStu("孙", 01055);
        UpdateStu stu4 = new UpdateStu("李", 01012);

        TreeSet<UpdateStu> tree = new TreeSet<>();

        tree.add(stu1);                                      // 向集合添加对象
        tree.add(stu2);
        tree.add(stu3);
        tree.add(stu4);

        Iterator<UpdateStu> it = tree.iterator();            // Set集合中的所有对象的迭代器
        System.out.println("Set集合中的所有元素");

        while (it.hasNext()) {                               // 遍历集合
            UpdateStu stu = (UpdateStu) it.next();
            System.out.println(stu.getId() + " " + stu.getName());
        }

        it = tree.headSet(stu2).iterator();                  // 截取排在stu2对象之前的对象
        System.out.println("截取前面部分的集合");
        while (it.hasNext()) {                               // 遍历集合
            UpdateStu stu = (UpdateStu) it.next();
            System.out.println(stu.getId() + " " + stu.getName());
        }

        it = tree.subSet(stu2, stu3).iterator();             // 截取排在stu2与stu3对象之前的对象
        System.out.println("截取中间部分的集合");
        while (it.hasNext()) {                               // 遍历集合
            UpdateStu stu = (UpdateStu) it.next();
            System.out.println(stu.getId() + " " + stu.getName());

        }
    }
}

  

转载于:https://www.cnblogs.com/YangYouHan/p/10987546.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值