java 哪些类实现了set_Java- Set及其实现类

Java- Set及其实现类

Java- Set及其实现类

Java- Set及其实现类

Set

HashSet

TreeSet

上一篇我们讲解了Collection接口的 子接口List 及其实现类(ArrayList 、LinkedList 迭代器) ,今天我们一起看看Collection的另一个子接口 Set

Set

Set 的实现类 基本都是使用了 对应的Map实现类 实现的。比如 HashSet 是基于 HashMap实现的,TreeSet是基于TreeMap实现的。

具体如何实现?

Map存储的是键值对,并且key不能重复 (value可以重复);Set 只使用了Map的Key位置存储数据,value的内容由java自动存放统一内容

HashSet

HashSet:使用哈希表的存储方式,HashMap实现;散列存放,无法保证原来的存储顺序

public static void main(String[] args) {

HashSet set = new HashSet<>();

boolean flag1 = set.add("锄禾日当午");

set.add("汗滴禾下土");

set.add("谁知盘中餐");

set.add("粒粒皆辛苦");

boolean flag2 = set.add("锄禾日当午"); // 添加失败

System.out.println(flag1);

System.out.println(flag2);

for(String s:set){

System.out.println(s);

}

System.out.println("____________________");

/*迭代器遍历set*/

Iterator iterator = set.iterator();

while(iterator.hasNext()){

System.out.println(iterator.next());

}

}

e84e2852d7155768660190d3406752b8.png

TreeSet

TreeSet:使用二叉树的存储方式,由treeMap实现;有序(自然顺序、操作系统默认的顺序)

TreeSet data = new TreeSet<>();

//系统提供的数据 有序

data.add("B");

data.add("C");

data.add("A");

data.add("D");

for(String s:data){

System.out.println(s);

}

98854c5fb46cf59868ee828f47945168.png

自己定义的类 要排序 必须实现 Comparable 接口 编写排序准则

public static void main(String[] args) {

TreeSet data = new TreeSet<>();

//自己定义的类 要排序 必须实现 Comparable 接口 编写排序准则

People p1 = new People("张三",18);

People p2 = new People("李四",20);

//People p3 = new People("悠悠",20);

//TreeSet不会存储一样的数据,p3不会被存储进去

data.add(p1);

data.add(p2);

for(People p :data){

System.out.println(p);

}

}

//Comparable 比较此对象对传入对象进行比较

static class People implements Comparable{

private String name;

private int age;

public People(String name, int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

People people = (People) o;

return age == people.age &&

Objects.equals(name, people.name);

}

@Override

public String toString() {

return "People{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

@Override

public int hashCode() {

return Objects.hash(name, age);

}

public People() {

super();

}

@Override

public int compareTo(People o) {

//this 与 o比较

//返回数据:负数 (this小)/ 零(一样大)/正数 this 大

if(this.age>o.age){

return 1;

}else if(this.age

return -1;

}else{

return 0;

}

}

}

486688fbe2c28075868dd8f26d7306ae.png

Java- Set及其实现类相关教程

system v信号量的操作及其实现函数

system v信号量的操作及其实现函数 信号量函数(3个) 1.semget 原型:int semget(key_t key,int nsems,int semflg); 返回值:失败返回-1,成功返回一个信号集的标识(该标识通过第一个参数key决定) 描述:创建或者获取一个信号量集 参数:key是关键字,一般

文件系统及其相关结构体

文件系统及其相关结构体 fd指向打开的文件描述符列表,开始的时候指向fd_array,当大小超过max_fds时,重新分配地址 file结构体 代表一个打开的文件 f_op其中包含着与文件关联的操作 进程内核栈与进程描述符之间的关系 task_struct结构体注释详解可参考http:/

用样本推断整体中心极限定理及其一些前提条件

用样本推断整体,中心极限定理及其一些前提条件 ?写的时候也从互联网找了一些资料,参考链接放在文章中间了。 一些稀碎的东西: 卡方分布的n是用来查表的关键要素。 variance:方差 standard deviation:标准差 本文其实重点是用样本推断整体这部分内容的一

JavaWeb-04 JSP内置对象--response对象 (addCookie(),setHeader(

JavaWeb-04 JSP内置对象--response对象 (addCookie(),setHeader(),sendRedirect()) response 服务器接收客户端请求:request 服务器对客户端的回应:response javax.servlet.http的接口 HttpServletResponse extends ServletResponse void addCookie(Cookie c

TClientDataSet[6]: 读取 TClientDataSet 中的图片数据

TClientDataSet[6]: 读取 TClientDataSet 中的图片数据 为什么80%的码农都做不了架构师? 当我第一次从 TClientDataSet 中读出图片数据时, 发现不是图片! 慢慢观察发现是前面多了 8 个字节(前 4 个字节是 01 00 00 01, 估计是格式标识和头大小; 后 4 个字节是

Direct2D (42) : 在文本布局中嵌入图片 IDWriteTextLayout.SetIn

Direct2D (42) : 在文本布局中嵌入图片 IDWriteTextLayout.SetInlineObject() 为什么80%的码农都做不了架构师? 这段代码怎么也过不去了,反反复复找不到原因;有谁知道,万望提醒我一下。 上面是刚碰到错误时的求助信息;现在终于找到错误了:是 D2D1.pas 的

同步屏障 CyclicBarrier应用以及其原理

同步屏障 CyclicBarrier应用以及其原理 文章系列目录 燕归来兮 https://www.zhoutao123.com/page/book/11 CyclicBarrier 是什么?从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。 它的作用就是会让一组线程叨

ES11的Promise.allSettled方法报错 TypeError: object is not it

ES11的Promise.allSettled方法报错 TypeError: object is not iterable !DOCTYPE htmlhtml lang=enhead meta charset=UTF-8 meta name=viewport content=width=device-width, initial-scale=1.0 titleES11的Promise.allSettled方法/title/headbody script typ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值