Java基础--Set接口

同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,

并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了。

List 接口不同的是, Set 接口中元素无序,并且都会以某种规则保证存入的元素不出现重复

没有索引,也没有带索引的方法,也不能使用普通的for循环。

HashSet

java.util.HashSet 底层的实现其实是一个 java.util.HashMap 支持。

1、是一个无序的集合,存储元素和取出元素的顺序有可能不一致

2、底层是一个哈希表结构(查询的速度非常快)

 

哈希值

是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来的,不是数据实际存储的物理地址)

在Object类有一个方法,可以获取对象的哈希值。

int hashCode()反对该对象的哈希码值

native:代表该方法调用的是本地操作系统的方法

哈希表

JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。

但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。

JDK1.8中,哈希表存储采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。

HashSet存储自定义类型元素 

HashSet中存放自定义类型元素时,需要重写对象中的hashCodeequals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一。

 

LinkedHashSet

HashSet下面有一个子类 java.util.LinkedHashSet ,它是链表和哈希表组合的一个数据存储结构。

特点:

底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值