zoukankan      html  css  js  c++  java
  • Java集合之Set

    什么是Set数据结构

    • Set相对于List是简单的一种集合,具有和Collection完全一样的接口,只是实现接口不同,Set不保存重复的元素,存储一组唯一,无序的对象
    • Set中的元素是不重复的,实现细节可以看Map,因为这些Set的实现都是对应的Map的一种封装。比如HashSet是对HashMap的封装,TreeSet对应TreeMap
    • Set底层是一个HashMap,由于HashMap的put()方法是一个键值对,当新放入HashMap的Entry中key与集合原有Entry的key相同(hashCode()返回值相同,通过equals比较也返回true),新添加的Entry的value会将覆盖原来Entry的value,但key不会有任何改变
    • 允许包含值为null的元素,但最多只能有一个null元素

    常见的实现类

    • HashSet
      • HashSet类按照哈希算法来存取集合中的对象,存取速度比较快
      • 对应的Map是hashMap,是基于Hash的快速元素插入,元素无顺序
    • TreeSet
      • TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序
    //创建对象,HashSet和TreeSet api⼀样
    Set<Integer> set = new HashSet<>();
    //往容器⾥⾯添加对象
    set.add("jack");
    //清空元素
    set.clear();
    //返回⼤⼩
    set.size();
    //根据对象删除元素
    set.remove("jack");
    //是否为空
    set.isEmpty();

    两则区别

    • HashSet不能保证元素的排列顺序,TreeSet是SortedSet接口的唯一实现类,可以确保集合元素处于排序状态
    • HashSet底层用的是哈希表,TreeSet采用的数据结构是红黑树(红黑树是一种特定类型的二叉树)
    • HashSet中元素可以是Null,但只能有一个,TreeSet不允许放入Null
    • 一般使用HashSet,如果需要排序的功能时,才使用TreeSet(插入、删除、修改性能慢)
  • 相关阅读:
    mysql 时间戳 转 时间
    VSCode搭建VUE 开发环境
    虚拟通信
    JavaScript 获取客户端计算机硬件及系统信息
    Thinkphp关联模型BELONGS_TO
    docker部署rancher踩坑篇
    青龙面板 脚本 依赖库下载安装
    Linux 随记
    Tekton DAG代码
    手写Spring valar
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13388704.html
Copyright © 2011-2022 走看看