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());
}
}
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);
}
自己定义的类 要排序 必须实现 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;
}
}
}
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