当前位置: 首页 > article >正文

【数据结构】Set的使用与注意事项

文章目录

    • Set 的使用
      • add()
      • iterator()
      • 注意事项

Set 的使用

SetMap 主要的不同有两点:Set 是继承自 Collection 的接口类,Set 中只存储了 Key

方法解释
boolean add(E e)添加元素,但重复元素不会被添加成功
void clear()清空集合
boolean contains(Object o)判断 o 是否在集合中
Iterator iterator()返回迭代器
boolean remove(Object o)删除集合中的 o
int size()返回set中元素的个数
boolean isEmpty()检测set是否为空,空返回true,否则返回false
Object[] toArray()将set中的元素转换为数组返回
boolean containsAll(Collection c)集合c中的元素是否在set中全部存在,是返回true,否则返回

false
boolean addAll(Collection c)将集合c中的元素添加到set中,可以达到去重的效果

add()

Set<String> set = new TreeSet<>();  
set.add("abc");  
set.add("hello");  
set.add("abc");  
System.out.println(set);

/*
[abc, hello]
*/
  • 可发现,set 中不能存储相同的元素

iterator()

通过迭代器返回集合

Set<String> set = new TreeSet<>();  
set.add("abc");  
set.add("hello");  
set.add("abc");  
  
Iterator<String> it =  set.iterator();  
while (it.hasNext()){  
    System.out.println(it.next());  
}

/*
abc
hello
*/
  • while 判断 it 是否还有下一个,有的话就打印,打印完后就到下一个

注意事项

  1. Set 是继承自 Collection 的一个接口类

  2. Set 中只存储了 key,并且要求 key 一定要唯一

  3. TreeSet 的底层是使用 Map 来实现的,其使用 keyObject 的一个默认对象作为键值对插入到 Map 中的

  4. Set 最大的功能就是对集合中的元素进行去重

  5. 实现 Set 接口的常用类有 TreeSetHashSet,还有一个 LinkedHashSetLinkedHashSet是在 HashSet 的基础上维护了一个双向链表来记录元素的插入次序。

  6. Set 中的 Key 不能修改,如果要修改,先将原来的删除掉,然后再重新插入

  7. TreeSet 中不能插入 nullkeyHashSet 可以

Set 底层结构TreeSetHashSet
底层结构红黑树哈希桶
插入/删除/查找时间 复杂度 O ( l o g N ) O(logN) O(logN) O ( 1 ) O(1) O(1)
是否有序关于Key有序不一定有序
线程安全不安全不安全
插入/删除/查找区别按照红黑树的特性来进行插入和删除1. 先计算key哈希地址 2. 然后进行 插入和删除
比较与覆写key必须能够比较,否则会抛出

ClassCastException异常
自定义类型需要覆写equals和

hashCode方法
应用场景需要Key有序场景下Key是否有序不关心,需要更高的 时间性能

http://www.kler.cn/a/288848.html

相关文章:

  • Redis高可用-主从复制
  • L10.【LeetCode笔记】回文链表
  • 【CSS】“flex: 1“有什么用?
  • Java项目实战II基于微信小程序的个人行政复议在线预约系统微信小程序(开发文档+数据库+源码)
  • 字节、快手、Vidu“打野”升级,AI视频小步快跑
  • 低代码集成多方API的简单实现
  • 正则表达式实现括号替换
  • 【机器学习】CNN在计算机视觉中的应用
  • 数学建模学习(130):神经网络预测—模型选择与实战案例解析
  • LeetCode—string练习
  • etcdctl defrag 剔除、添加etcd节点
  • 调用k8s api实现添加用户并授权
  • 【Hot100】LeetCode—33. 搜索旋转排序数组
  • 台球助教APP小程序的前端交互设计
  • Redis的内存淘汰策略
  • 正则表达式实现带有条件的爬取
  • 动态规划-最大子数组和
  • [解决]Prometheus 与 Grafana进行组合,但是不显示数据与图像
  • 【王树森】Transformer模型(1/2): 剥离RNN,保留Attention(个人向笔记)
  • Java开发学习Kotlin 笔记
  • 每天学习一个基础算法之插入排序
  • 谷歌地图广告指南
  • P1438 无聊的数列
  • React 实现PDF预览(数据源使用文件流而不是url)
  • 哪些好用的待办事项清单值得推荐:待办任务清单app
  • (二十八)STL set(集合)