List和Set区别?

List和Set区别?

List和Set都是常用的集合接口,可以通过这两个接口去实现集合类。List可以实现的集合类有:ArrayList、LinkedList和Vector。Set可以实现的集合类有:HashSet和TreeSet。
List和Set的区别主要是:
List集合类中的元素是可以重复,存在下标,元素是有顺序。
Set集合类中的元素是唯一的,不存在下标,元素是无序的。
List集合类:
1、ArrayList
ArrayList是通过数组实现的,所以查询块、增删慢。它是一种线程不安全、效率高的集合类。
2、LinkedList
LinkedList是通过链表实现的,所以查询慢、增删快。它是一种线程不安全、效率高的集合类
3、Vector
Vector是通过数组实现的,所以查询块、增删慢。它是一种线程安全、效率低的集合类。(现在已经不怎么使用了)
Set集合类
1、HashSet
HashSet通过哈希码来保存元素,所以可以防止元素重复。它是一种无序的,线程不安全,运行效率高,常用的集合类
2、TreeSet
TreeSet基于树状结构,可以实现排序功能,支持自然排序(即对于基本数据类型可以实现默认升序排列)。但是如果是特殊类型,比如对象、数组、集合,则需要通过比较器对象自定义排序规则。


HashSet的底层原理
HashSet的底层是通过HashMap来实现的,是基于数组+链表+红黑树实现(jak1.8 才开始出现红黑树)。把所有存入的数据都转换HashCode,如果HasCode不同,HashSet会认为是不同的元素,就会存在不同的哈希桶(相当于数组中是一个元素)中。
当每一次存值时,判断新的元素的HashCode是否跟HashSet集合中元素有没有HashCode相同的,如果不同则存入新的元素。如果存在HashCode相同,会再判断值是否相同。如果值还相同,HashSet会认为是重复的元素,会替换元素。如果值不同,会在哈希桶的下面拼一个链表来保存元素。
:链表长度超过8会转换红黑树,红黑树长度小于6时,会转换回链表。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值