Java:Set集合及其实现类HashSet、LinkedHashSet

1.Set集合接口的特点:

  • 1.set集合中的元素不可以重复;
  • 2.有且最多只能包含一个null值;
  • 3.Set是一个没有索引的集合。

2.Set集合的遍历

  • 1.通过迭代器进行遍历
  • 2.通过增强for进行遍历

3.HashSet集合的特点:

  • 1.一个不包含重复元素的 collection

  • 2.HashSet集合最多包含一个null元素

  • 3.HashSet集合是没有索引值的集合

  • 4.底层数据结构:哈希表(HashMap)

       在JDK1.7之前(包含):数组+链表
       在JDK1.8之后(包含):数组+链表或数组+红黑树(链表长度达到8)
    
  • 5.HashSet是无序的集合

       无序:存入的顺序和取出的顺序不一致(不是随机概念)
    

4.HashSet集合如何保证元素的唯一性

  • 1.hashCode()
  • 2.equals()

String类中hashCode()为什么乘以31
针对对象人工模拟的地址值,不是真实的内存物理地址值,有可能存在误差

  • 1.乘以质数减少哈希码冲突
  • 2.如果质数过大,会超出int取值范围,如果质数过小,哈希码冲突概率增大(29和31较为合适两个数据)
  • 3.31的二进制位11111,转换十进制2表示方式 2^5 -1 和整数类型取值范围方式也是一样

5.LinkedHashSet的特点

  • 1.LinkedHashSet有序的集合

  • 2.底层数据结构:

     哈希表+单向链表(保证元素的有序性)
    
  • 3.LinkedHashSet也是不可以存储重复元素

  • 4.LinkedHashSet里面没有特有的方法,全部是继承过来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值