简述哈希表

目录

 Set接口:

set接口的遍历方式:

 常用实现类:

           构造方法:

             底层数据结构:

                  新增过程:

                    什么情况下链表会转红黑树:

                   什么情况下会扩容:


 Set接口:


  Set接口没有扩展新的功能。

set接口的遍历方式:

同Collection的遍历方式一样,因为set接口是Collection接口的子接口

1.可以使用迭代器

2.增强for

3.不能使用索引的方式来获取


 常用实现类:


            HashSet:无序:新增顺序和取出顺序不一定一致

         (1)HashSet实现了Set接口

         (2)HashSet实际上是HashMap

         (3)可以存放null值,但是只能有一个null


           构造方法:


                   public HashSet();
                   public HashSet(int capacity);
                   public HashSet(int capacity,float loadFactor);


   
          底层数据结构

              哈希表(数组+链表/红黑树)
                什么类型的数组:java.util.HashMap$Node(表示一个单项链表)
                 数组长度是多少:16
                 如何判断新增的两个元素是否重复:
                     比较两个对象的哈希值  &&   (地址值相同 || equals相同) //规则


                  新增过程:


                      a.计算新增元素的哈希值
                      b.(假设数组已经创建出来),通过  hash%数组长度
                      c.如果该位置为null:则直接新增
                         如果该位置不为null:
                         c1.判断该元素是否重复:
                         c11.如果不重复,则新增到该索引值位置链表的最后面
                         c12.如果重复:则不新增


  
                  什么情况下链表会转红黑树:


                      a.当同一索引值下元素个数>8,并且数组长度>=64


 
                  什么情况下会扩容:


                      a.当同一索引值下元素个数>8,并且数组长度<64
                      b.数组的索引值,占有>到0.75,会扩容


  
                  注意:同一索引值下元素不能超过8个,如果超过
                      1.扩容,把元素分开,让其小于8个
                     2.把链表结构转换成红黑树
 
                 新容量 = 旧容量<<1;
              
                  可以通过构造方法指定加载因子。
                  可以通过构造方法指定哈希表数组的长度:
                      实际的长度>=传入容量,则最近2的次方的值。
  
              LinkedHashSet:有序
                  构造方法:
                      public LinkedHashSet();
                  底层数据结构:链表+哈希表 

 


  
              TreeSet<E>:可排序
                  构造方法:
                      public TreeSet();
                      public TreeSet(Comparator<E> c);
                  底层数据结构:红黑树

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值