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

[数据结构] 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存在,返回false
        boolean 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,否则返回false
        System.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.kler.cn/a/536220.html

相关文章:

  • 【正点原子K210连载】第六十七章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南
  • 【漫话机器学习系列】076.合页损失函数(Hinge Loss)
  • Linux命令总结
  • 生产环境的 MySQL事务隔离级别
  • 学习threejs,pvr格式图片文件贴图
  • Java进阶学习之路
  • OpenBMC:可编译的硬件平台定义在哪
  • 安恒网安面试题来啦!
  • 模型压缩技术(一):模型蒸馏,给大模型“瘦身”
  • 软件设计模式
  • 自动化测试(selenium篇)
  • python怎么求 一个数是否包含3
  • WPF模板
  • Python应用指南:一个库解决常见的国内坐标系转换需求
  • 工厂模式+枚举类的json序列化+redisson的使用
  • 【深度学习】DataLoader自定义数据集制作
  • 海康威视豆干型网络相机QT的Demo
  • 【学习总结|DAY036】Vue工程化+ElementPlus
  • 华为小艺助手接入DeepSeek,升级鸿蒙HarmonyOS NEXT即可体验
  • Linux中DataX使用第三期
  • Java 8的Stream API
  • 栈和队列的实现(C语言)
  • 解决aspose将Excel转成PDF中文变成方框的乱码问题
  • esp32 udp 客户端 广播
  • 【Elasticsearch】nested聚合
  • Day67:类的继承