Set集合不重复原理

发布于:2022-11-07 ⋅ 阅读:(440) ⋅ 点赞:(0)

Set接口:在Collection的基础上没有再做功能的扩展
                  特点:
                      1.没有索引值
                      2.不可以重复
                      

Set集合不重复原理:

新增元素:
                     1. 求新增元素的哈希值
                      2. 新增元素的哈希值%数组长度,确定新增元素在数组中的索引值位置
                          如果该位置为null:则直接新增
                          如果不为null:则 判断是否重复相同(用equals方法比较属性值)
                              如果重复:不新增
                              如果不重复:则新增挂到该索引值对应链表的最后位置
      
                  判断两个元素是否相同的逻辑:
                      p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k)))
                      两个元素的哈希值相同 && (地址值相同 || equals相同)
                      如果这个为true,就认为是同一个元素
      
                  哈希值:是通过调用hashCode方法得来的int类型的整数,该方法属于Object类的方法
                         所有对象都可以调用
                          hashCode方法得到的哈希值简单来说可以理解为地址值。
                 
                  自定义类中如果认为成员变量的值相同就是一个元素,在set集合中只添加一次,
                  则可以通过快捷方式覆盖重写hashCode方法和equals方法
      
                  HasshSet中存贮的如果是自定义对象,需要重写hashCode和equals方法(比如Student)
                 String Integer等java已经重写过了hashCode和equals,不需要重写 


网站公告

今日签到

点亮在社区的每一天
去签到