Collection中的List接口和Set接口

![在这里插入图
List和Set的区别:
List存放有序的,可重复的元素。List中元素的存放顺序是按元素的插入时间一次往后排列来的。
Set存放无序的,不可重复的元素(前提是如果添加的元素是早定义的类的话那必须得重写hashCode()和equals()方法)。Set中元素的存放顺序与元素的插入时间无关,是根据元素的hashCode值来排列的。如果hashcode值一样,则判断值是否相等,相等则不存,不相等则存进来。

如果不重写hashCode()和equals(),那会出现相同的元素可能都会存进来,例:
在这里插入图片描述
如果重写hashCode()和equals(),那就不会出现相同的元素存进来,例:
在这里插入图片描述

ArrayList和LinkList的区别:

ArrayList的内存结构是数组,这个数组的初始是10位的,插入的时候如果超过10位就将位数扩大到原来的2.5倍,依次类推。如果是add()的话会插入到最后一位,效率还是挺高的,但是如果这种add(i,b)方式将元素插入到特定的位置,那这个位置之后的元素将都会重新排序,效率低下。同样删除其中某一个元素时候,删除元素后面的元素也需要重新分组,效率低下。但是查询效率高,直接通过下角标找到对应的值即可。

LinkedList使用了循环双向链表数据结构,LinkedList链表由一系列表项连接而成,如图:在这里插入图片描述
对于LinkedList而言,在插入元素到任何位置,以及删除都是一样的,只需要把这个元素已经这个元素的连接删除掉就可以。但是查询效率低,因为每次取一个值的时候会先判断这个值在前一半还是后一半,每次取值都会将这个值前面的所有值都查一遍。

总结:
ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高

HashSet与LinkedHashSet区别:
HashSet是按传入值的hashCode值由大到小的顺序去遍历的,与增加的顺序无关。
LinkedHashSet遍历的时候虽然是按增加的顺序依次遍历的,但是它存储的时候依然是按hashCode值去存储的。

总结:
HashSet
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()
LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一
TreeSet
底层数据结构是红黑树。(唯一,有序)
1. 如何保证元素排序的呢?
自然排序
比较器排序
2.如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值