Day09_42_Set集合_HashSet

集合之HashSet

* HashSet
     
     - HashSet无序不可重复,HashSet底层实际上是一个HashMap,HashMap底层采用了Hash表数据结构。

     - 哈希表又叫做散列表,哈希表底层是数组加链表的数据结构, 数组的每一个元素都是一个单向链表,每一个单向链表都有一个独一无二的哈希值。某个单向链表中的每一个节点hash值相等。

     - Hash值实际上是key值通过调用HashCode方法,再通过JHashFunction得出的hash值。

     - 如何向Hash表中添加元素?
        
          1. 先调用将要被存储的key的HashCode方法得出Hash值,如果该Hash值在现有Hash表中不存在,那么直接加入元素。
       
          2. 如果该Hash值已经存在于当前hash表中,那么就需要继续调用key的equals方法,如果equals方法返回false,证明该key的值和哈希表中的值不相等,又因为Set集合的特定点是无序不可重复,所以只有Key值和 
             已存在于链表中的值不相等的情况下才能将该Key添加进去。

          3. 如果key调用equal()方法返回true,证明key值和哈希表中现有的值存在重复,则放弃添加。

     - HashSet是HashMap中的key部分,HashSet有什么样的特点那么HashMap中的key部分就有哪些特点。

     - HashSet底层是HashMap,HashMap底层数组初始化容量是16,加载因子是0.75f(0.75指的是当元素占数组容量的百分之75的时候就进行扩容)


    - 代码
 
              ```
              import java.util.HashSet;
              import java.util.Iterator;
              import java.util.Set;

              public class SetText01 {
                  public static void main(String[] args) {

                      // 创建一个Set集合   HashSet初始化容量

                      Set set=new HashSet();   // 父类引用指向子类对象

                      // Set集合是无序不可重复的
                      set.add(1);   //自动装箱
                      set.add(1);  // 遍历输出发现 第二个 1 , 并没有加到Set集合中。
                      set.add("2021年4月3日");
                      set.add("12点16分");
                      set.add("星期六");
                      set.add("天气晴");

                      // 遍历Set集合 ,遍历集合发现,元素输出顺序和加载进去的顺序是不一样的,证明set集合确实是无序集合。
                      Iterator  iterator= set.iterator();
                      while(iterator.hasNext()){
                          System.out.println(iterator.next());
                      }
                  }
              }
上一篇:CentOS 7 Tomcat部署项目 war包


下一篇:Python做小学四年级奥数题算三个人的年龄