Set接口

Set接口

  1. 无序,不可重复
  2. 没有索引方式,没有带索引的方法,不能使用普通的for循环

HashSet子类

底层是哈希表结构,查询的速度非常快。不保证顺序不变。

常用方法还是Collection的方法,只是没有索引方法

哈希值:

十进制的整数,是系统自动给出的逻辑地址,不是物理地址。Object类中通过hashCode()方法获取

底层结构:

哈希表,1.8版本前,哈希表=数组(table=16)+链表;1.8版本之后,哈希表=数组+链表+红黑树(链表长度大于8时)(提高查询速度)

数组中存放哈希值,相同哈希值的下面通过链表/红黑树放置不同元素

Set集合元素不重复的原理?

Set集合在调用add()方法的时候,会调用元素的hashCode()和equals()方法,判断元素是否重复。具体步骤为:首先调用hashCode()计算哈希值,如果数组中没有则加入,否则就是有哈希冲突;接下来判断哈希冲突的元素与之的equals()比较,如果返回true则不加入,否则加入。

前提:存储的元素必须重写hashCode()和equals()方法,确保元素不重复。

HashSet集合无序理解?

HashSet在保存数据的时候显然还是得按一定顺序放入其背后的数组中,但顺序不是用户可控制的,对用户来说就是“无序”。

那么每次遍历的结果是否相同呢????

LinkedHashSet子类

属于HashSet的子类,不同在于:

LinkedHashSet的底层结构是  :哈希表+链表(记录元素的存储顺序)

保证LinkedHashSet中的元素是有序的。

Collections集合工具类的方法

addAll()、shuffle()打乱、sort()升序排列、

注意:

  1. sort(List<T>)方法中如果是自定义的元素对象,元素对象类必须实现comparable接口,重写compareTo()方法,自定义比较规则。
  2. sort(List<T>,Comparator <? super T>)方法中,采用的Comparator接口,需要sort方法的内部重写compare()方法。

comparable和Comparator的区别:

  1. comparable接口:自己和别人比较,需要自己重写compareTo()方法,自定义比较规则。
  2. Comparator接口:相当于找一个第三方的裁判比较。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值