• 14.4 Set集合


    1、概述
      Set集合中的对象不按特定的方式排序,只是简单地把对象加入集合,但Set集合中不能包含重复对象。Set集合由Set接口和Set接口的实现类组成。Set接口继承了Collection接口,因此包含Collection接口的所有方法。
    2、Set解耦常用的实现类有HashSet类与TreeSet类
      a、HashSet类实现Set接口,由哈希表(实际上市一个HashMap实例)支持。它不保证Set的迭代书序,特别是他不保证该顺序恒久不变。此类允许使用null元素。
      b、TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口,因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定的比较器递增排序,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。
    3、TreeSet类新增的方法如下表:

    方法 功 能 描 述
    first() 返回此Set中当前第一个(最低)元素
    last() 返回此Set中当前最后一个(最高)元素
    comparator() 返回对此Set中的元素进行排序的比较器。如果此Set使用自然顺序,则返回null
    headSet(E toElement) 返回一个新的Set集合,新集合时toElement(不包含)之前的所有对象
    subSet(E fromElement, E fromElement) 返回一个新的Set集合,是fromElement(包含)对象与fromElement(不包含)对象之间的所有对象
    tailSet(E toElement) 返回一个新的Set集合,新集合包含对象fromElement(包含)之后的所有对象


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

     1 package com.lzw;
     2 import java.util.Iterator;
     3 import java.util.TreeSet;
     4 
     5 public class UpdateStu implements Comparable<Object>{
     6     String name;
     7     long id;
     8     
     9     public UpdateStu(String name, long id) {    //构造方法
    10         this.id = id;
    11         this.name = name;
    12     }
    13     
    14     public int compareTo(Object o) {
    15         UpdateStu upstu = (UpdateStu) o;
    16         int result = id > upstu.id?1:(id==upstu.id?0:-1);    //参照代码说明
    17         return result;
    18     }
    19     
    20     public String getName() {
    21         return name;
    22     }
    23     
    24     public void setName(String name) {
    25         this.name = name;
    26     }
    27     
    28     public long getId() {
    29         return id;
    30     }
    31     
    32     public void setId(long id) {
    33         this.id = id;
    34     }
    35     
    36     public static void main(String[] args) {
    37         UpdateStu stu1 = new UpdateStu("李1",0001);    //创建UpdateStu对象
    38         UpdateStu stu2 = new UpdateStu("李2",0002);
    39         UpdateStu stu3 = new UpdateStu("李3",0003);
    40         UpdateStu stu4 = new UpdateStu("李4",0004);
    41         UpdateStu stu5 = new UpdateStu("李5",0005);
    42         
    43         TreeSet<UpdateStu> tree = new TreeSet<>();
    44         tree.add(stu1);
    45         tree.add(stu2);
    46         tree.add(stu3);
    47         tree.add(stu4);
    48         tree.add(stu5);
    49         
    50         Iterator<UpdateStu> it = tree.iterator();    //Set集合中的所有对象的迭代器
    51         System.out.println("Set集合中的所有元素:");
    52         while(it.hasNext()) {
    53             UpdateStu stu = (UpdateStu)it.next();
    54             System.out.println(stu.getId() + "  " + stu.getName());
    55         }
    56         
    57         it = tree.headSet(stu2).iterator();     //截取排在stu2对象之前的对象
    58         System.out.println("截取前面部分的集合:");
    59         while(it.hasNext()) {
    60             UpdateStu stu = (UpdateStu)it.next();
    61             System.out.println(stu.getId() + "  " + stu.getName());
    62         }
    63         
    64         it = tree.subSet(stu2, stu3).iterator();     //截取排在stu2与stu3之前的对象
    65         System.out.println("截取中间部分的集合:");
    66         while(it.hasNext()) {
    67             UpdateStu stu = (UpdateStu)it.next();
    68             System.out.println(stu.getId() + "  " + stu.getName());
    69         }
    70         
    71     }
    72 }
    View Code
  • 相关阅读:
    [转]在nodejs使用Redis缓存和查询数据及Session持久化(Express)
    [转]最常用的商务职场英语邮件100个句式
    [转]玩转Angular2(4)--制作左侧自动定位菜单
    [转]Angular开发(十八)-路由的基本认识
    Consul之:服务注册与发现
    Consul之:key/value存储
    服务容错保护断路器Hystrix之六:服务熔断和服务降级
    延时队列:Java中的DelayQueue
    分布式延迟消息队列实现分析与设计
    基于redis的延迟消息队列设计
  • 原文地址:https://www.cnblogs.com/studycode/p/9536746.html
Copyright © 2020-2023  润新知