有关Set集合的一些

有关Set集合的一些

这个博客包括:

  • 一、 Set集合的底层实现
  • 二、List、Set、Map 和 Queue 之间的区别

一、 Set集合的底层实现

①Set是一个接口,集成2于Collection,在Set集合内无法存储重复的元素, 不可重复(用equals()判断),并且是无序的。Set常用实现类有HashSet、LinkedHashSet、TreeSet

②HashSet是哈希表实现的(不稳定),LinkedHashSet是链表实现的(按存储顺序存取),TreeSet是红黑树实现的(按排序顺序存取),通常我们称Set为单列集合。

刚才HashSet为什么是不稳定的?因为HashSet的内部是采用hashmap的结构实现的,因为hashmap是不安全的(这个之前写过的),所以这个hashSet也是稳定的,不安全的。

③Set底层使用map结构实现的。

二、List、Set、Map 和 Queue 之间的区别

list 和set 有共同的父类 它们的用法也是一样的 唯一的不太就是set中不能有相同的元素 list中可以

list和set的用途非常广泛 list可以完全代替数组来使用

map 是独立的合集 它使用键值对的方式来储存数据 键不能有重复的 值可以用重复

map不像上边两种集合那个用的广泛 不过在servlet 和jsp中 map可是绝对的重中之重 页面之间传值全靠map

List是集合类的接口,子类有ArraryList 和LinkList,通常在Android开发中我们常用的是arrayList,来将数据进行插入和移除。

其次map也是一个集合映射,不过是键值对的映射,也就是key , value形式,比如当我们需要查询其中的某个对象时,只需要查询其key便能直接获取到他的value(值),就像一个小型的数据库,也有类似于hashmap , Linkedhashmap ,treemap等方法来进一步实现和拓展,并且提高他的性能。

Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。 Set接口主要实现了两个实现类:

  • HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快
  • TreeSet :TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。
  • Set的功能方法
    Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只 是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为复杂)

Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

  • HashSet:为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。

  • TreeSet: 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。

LinkedHashSet:具有HashSet的查询速度,且**内部使用链表维护元素的顺序(插入的次序)。**于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

Queue用于模拟"队列"这种数据结构(先进先出 FIFO)。队列的头部保存着队列中存放时间最长的元素队列的尾部保存着队列中存放时间最短的元素。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素,队列不允许随机访问队列中的元素。结合生活中常见的排队就会很好理解这个概念。

3.1) PriorityQueue
PriorityQueue并不是一个比较标准的队列实现,PriorityQueue保存队列元素的顺序并不是按照加入队列的顺序,而是按照队列元素的大小进行重新排序,这点从它的类名也可以看出来。其实这个是违背队列的意思的,因为队列是先进先出,但是这个PriorityQueue则不是先进先出的

3.2) Deque
Deque接口代表一个"双端队列",双端队列可以同时从两端来添加、删除元素,因此Deque的实现类既可以当成队列使用、也可以当成栈使用

3.2.1) ArrayDeque
是一个基于数组的双端队列,和ArrayList类似,它们的底层都采用一个动态的、可重分配的Object[]数组来存储集合元素,当集合元素超出该数组的容量时,系统会在底层重新分配一个Object[]数组来存储集合元素

3.2.2) LinkedList

这个转载自:https://blog.csdn.net/qq_32575047/article/details/78856495

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值