14.4 Set集合

摘要:
Set集合由Set接口和Set接口的实现类组成。它不保证Set的迭代书序,特别是他不保证该顺序恒久不变。  b、TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口,因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定的比较器递增排序,即可以通过比较器对用TreeSet类实现的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     longid;
8     
9     public UpdateStu(String name, long id) {    //构造方法
10         this.id =id;
11         this.name =name;
12 }
13     
14     public intcompareTo(Object o) {
15         UpdateStu upstu =(UpdateStu) o;
16         int result = id > upstu.id?1:(id==upstu.id?0:-1);    //参照代码说明
17         returnresult;
18 }
19     
20     publicString getName() {
21         returnname;
22 }
23     
24     public voidsetName(String name) {
25         this.name =name;
26 }
27     
28     public longgetId() {
29         returnid;
30 }
31     
32     public void setId(longid) {
33         this.id =id;
34 }
35     
36     public static voidmain(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

免责声明:文章转载自《14.4 Set集合》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python 获取天气信息创建podSpec,使用pod管理第三方库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SpringBoot启动过程中涉及到了扩展接口

SpringApplicationRunListener接口 1、ApplicationListener接口 是ApplicationContext的事件监听器 2、EnvironmentPostProcessor接口 上下文环境后置处理器,事件中调用 3、PropertySourceLoader接口 自定义配置文件加载器,自己解析配置文件属性...

微信小程序http接口封装怎么实现

微信小程序http接口封装怎么实现?微信小程序开发的编写,需要调用后端接口,经常要用到wx.request方法,所以就自己封装了一下,简化一下代码,如果能给大家提供帮助更好,我的项目后端是使用的Java SSM框架,wx.request的URL就是后端提供的接口。在封装的时候我在网上看了很多篇博客,90%以上的全都是直接在success回调函数中直接打印返...

Jmeter实践:一粒云项目—Jmeter获取文件列表与下载接口串联测试及上传文件与下载接口之间的串联测试(二十四)

上一篇文章中通过json Extractor或者正则表达式获取到的fileId可以用在文件的下载操作里,索引可以把这两个接口串联起来,所以把下载操作放到文件列表操作下面,但是执行发现,执行不通,因为获取到很多fileId,这时候就用到了ForEach控制器 foreach的用法:去遍历每个数组的数据 执行结果: 上传文件与下载接口之间的串联测试 涉及到...

接口性能测试方案

一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点再可以细分,如对于一个 C/S 软件的响应时间可以细分为网络传输时间、应用服务器处理时间、数据库服务器处理时间。另外客户端自身也存在着解析时间、界面绘制呈现时间等。  响应时间主要站在客户端角度来看的一个性能指标,它...

USB3.0测试和使用说明

概述 AC6102上集成了一颗Cypress 推出的高性能USB3.0传输芯片CYUSB3014,Cypress称之为EZ-USBFX3。该芯片性能强劲,功能强大,接口简单,非常适合用于各种需要高速数据传输的场合,以下为摘自EZ-USBFX3数据手册中关于该芯片的介绍: 赛普拉斯EZ-USBFX3是新一代USB3.0外设控制器,具有高度集成的灵活特性,可帮...

Charles与Jmeter结合编写接口测试

个人工作总结 一、从Charles中获取数据 第一步:获取接口Contents中的Headers数据 放入Jmeter的HTTP信息头管理器 第二步:获取接口Contents中Query String数据 放入Jmeter的HTTP请求参数中 第三步:Jmeter中创建http请求,复制数据后使用Add from Clipboard快捷键粘贴 Http...