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

[数据结构] Set的使用与注意事项

目录

Set的说明

常见方法说明

注意事项

TreeSet使用案例


Set的说明

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

常见方法说明

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

注意事项

  1. Set是继承自Collection的一个类接口
  2. Set中只存储了Key,并且要求key一定要唯一(key不可以重复)
  3. TreeSet的底层是使用Map来实现的, 其使用key与Object的一个默认对象作为键值对插入到Map中的
  4. Set最大的功能就是对集合中的元素进行去重
  5. 实现Set接口的常用类有TreeSet和HashSet, 还有一个LinkedHashSet, LinkedHashSet是在HashSet的基础上维护了一个双向链表来记录元素的插入次序.
  6. Set中的key不能修改,如果要修改,先将原来的删除掉, 然后再重新加入
  7. TreeSet中不能插入null的key,HashSet可以.
Set底层结构TreeSetHashSet
底层结构红黑树哈希桶
插入/删除/查找时间复杂度O(log_{2}n)O(1)
是否有序关于key有序不一定有序
线程安全不安全不安全
插入/删除/查找区别按照红黑树的特性来进行插入和删除1.先计算key哈希地址 2.然后进行插入和删除
比较与覆写key必须能够比较,否则会抛出ClassCastExcetion异常自定义类型需要覆写equals和hashCode方法
应用场景      需要key有序场景下key是否有序不关心,需要更高的时间性能

TreeSet使用案例

public static void TestSet() {Set<String> s = new TreeSet<>();// add(key) : 如果key不存在,则插入,返回true;// 如果key存在,返回falseboolean isIn = s.add("1");System.out.println(isIn);s.add("2");s.add("3");s.add("4");s.add("5");isIn = s.add("1");System.out.println(isIn);System.out.println(s.size());System.out.println(s);// add(key): key如果是空,抛出空指针异常// s.add(null);//contains(key): 如果key存在,返回true,否则返回falseSystem.out.println(s.contains("1"));System.out.println(s.contains("10"));// remove(key): key存在,删除成功返回true//              key不存在,删除失败,返回false//              key为空,抛出空指针异常s.remove("1");System.out.println(s);s.remove("10");System.out.println(s);Iterator<String> it = s.iterator();while(it.hasNext()) {System.out.println(it.next() + " ");}System.out.println();}
http://www.lryc.cn/news/534165.html

相关文章:

  • amis组件crud使用踩坑
  • 离线统信系统的python第三方库批量安装流程
  • 韶音科技:消费电子行业售后服务实现数字化转型,重塑客户服务体系
  • 神经网络|(九)概率论基础知识-泊松分布及python仿真
  • 114,【6】攻防世界 web wzsc_文件上传
  • 【Kubernetes的SpringCloud最佳实践】有Service是否还需要Eureka?
  • SQL最佳实践(笔记)
  • vue3学习四
  • C# LiteDB 使用教程
  • Python Pandas(3):DataFrame
  • 使用通义灵码 ai编程 来提高开发效率
  • 【OpenCV】入门教学
  • 大数据项目4:基于spark的智慧交通项目设计与实现
  • netcore openTelemetry+prometheus+grafana
  • Spring Boot接入Deep Seek的API
  • Git、Github和Gitee完整讲解:丛基础到进阶功能
  • MyBatis的工作流程是怎样的?
  • Maven 安装配置(完整教程)
  • 分享如何通过Mq、Redis、XxlJob实现算法任务的异步解耦调度
  • 发布:大彩科技DN系列2.8寸高性价比串口屏发布!
  • 集合类不安全问题
  • 【基于SprintBoot+Mybatis+Mysql】电脑商城项目之上传头像和新增收货地址
  • AI知识库和全文检索的区别
  • 20240817 联想 笔试
  • IntelliJ IDEA 安装与使用完全教程:从入门到精通
  • 【JVM详解一】类加载过程与内存区域划分
  • 250207-MacOS修改Ollama模型下载及运行的路径
  • Win10 部署llama Factory 推荐教程和遇到的问题
  • 如何在Android Studio中开发一个简单的Android应用?
  • ubuntu下迁移docker文件夹