• 2022-08-06 学习日记(26th day)集合框架---Set


    目录

    Set集合:

    HashSet集合:

    LinkedHashSet集合:

    TreeSet集合:

    重写compareTo方法:


    Set集合:

    Collection接口:

            List:有顺序,元素可以重复,顺序指的是添加的先后顺序

            Set:没有顺序(没有按照添加的顺序排列),元素不可以重复,顺序值的是添加的先后顺序         

            所谓的不能重复,默认情况下比较的是地址,引用数据类型重复还是可以添加的          eg:set.add(new x("",""));

    那么:

            Set集合如何确保数据的不重复:确保数据类型的类要重写hashCode和equals方法。

    Set其实是有顺序的,内部其实是有一个专门排列的算法。

    1.所谓的无序不等于随机

    2.所谓的无序指的是没有按照添加的先后顺序,但其实内部是做了排序的。

            内部结构:哈希表:由数组+链表+红黑树组成。

    HashSet集合:

    1. HashSet集合底层采用了哈希表这种数据结构
    2. HashSet在实例化时,底层实际实例化了个HashMap
    3. 往HashSet集合中存储元素,实际存放到了HashMap集合的key部分

    LinkedHashSet集合:

    基本与HashSet一样

    与HashSet的区别和联系:

    H是L的父类,H内部结构复杂,L的结构就是链表但是实现Set接口

    对HashSet的拓展:添加数据的同时维护数据的添加顺序,但也仅仅如此,你还是取不出来

                                    操作数据的效率略低。

    TreeSet集合:

    可以排序的Set集合

    排序的规则:你要排序的对象的类必须实现Comparable接口

    1. TreeSet集合继承了SortedSet接口的特点(无序不可重复可自动排序)
    2. TreeSet集合底层采用了二叉树这种数据结构
    3. TreeSet在实例化时,底层实际实例化了个TreeMap
    4. 往TreeSet集合中存储元素,实际时存放到了TreeMap集合的key部分

    重写compareTo方法:

    为什么要重写compareTo方法,什么时候要重写compareTo方法

    重写compareTo方法是为了在创建引用对象时,防止TreeSet集合把所有引用对象当成重复的,就默认只存储一个

    想自定义排序规则,或用引用数据类型防止重复时。

    重写:

    1. @Override
    2. public int compareTo(Person p) {
    3. //自己写排序规则
    4. if(this.id>p.id){
    5. return -1;//大的往前去
    6. }
    7. if(this.id.equals(p.id)){
    8. return 0;
    9. }
    10. if(this.id
    11. return 1;//小的往后去
    12. }
    13. return 0;
    14. }

    为什么return返回的是1,0,-1:

    compareTo方法返回的是int型:

    负数-1:代表比较的两个值调用者小

    0:两个值相等

    正数1:比较的两个值大。

    ps:负数代表:调用者往前去,正数往后去,0不动.

  • 相关阅读:
    [附源码]Python计算机毕业设计Django房屋租赁信息系统
    浙大医疗健康产业管理MBA提面经验分享
    【云原生之Docker实战】使用Docker部署Flarum开源论坛
    实例化Servlet类[com.gowork.servlet.helloservlet]异常【BUG已解决】
    括号匹配
    将dataframe中的某列指定为索引列pd.set_index
    Java泛型中K、T、V、E、?等的含义
    密码学系列(四)——对称密码1
    01-JVM-类加载篇
    LLM大模型工程师面试经验宝典--基础版(2024.7月最新)
  • 原文地址:https://blog.csdn.net/weixin_49627122/article/details/126201840