Java的集合(二)

开发工具与关键技术:eclipse与java语言
作者:陈鑫鹏
撰写时间:2021年7月6日

Set集合:
Set集合就好像一个罐子,程序可以依次把多个对象“丢进”Set集合里,而Set集合通常不能记住元素的添加顺序
Set集合不允许包含相同的元素,如果把两个相同的元素加入同一个Set集合中,添加操作就会失败,add()方法返回false,并且新元素不会被加入
Set常用方法:
在这里插入图片描述

1.HashSet类
HashSet类是Set接口的典型实现类,大多数时候使用Set集合时就是使用这个类来实现的。HashSet类按Hash算法来存储集合中的元素,这一点就说明了它具有很好的存取和查找性能
HashSet类具有以下特点:
不能保证元素的排列顺序,顺序有可能和添加的顺序不同,顺序也有可能发生变化
HashSet不是同步的(不是线程安全的),如果多个线程同时访问一个HashSet,当中有两个或者两个以上的线程同时修改了HashSet集合时,就必须通过代码来保证其同步
集合元素值可以是null,但只能放入一个null
当向HashSet集合中存入一个元素是,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据该hashCode值决定该对象在HashSet中的存储位置。如果有两个元素通过equals方法比较返回true,但它们的hashCode()方法返回值不相等,HashSet将会把它们存储在不同的位置,同然可以添加成功
HashSet判断元素是否相等的依据:hashCode()相同,equals()方法相同
2.LinkedHashSet类返回值
HashSet类还有一个子类LinkedHashSet,LinkedHashSet集合也是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。也就是说,当遍历LinkedHashSet集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里的元素
LinkedHashSet需要维护元素的插入顺序,因此性能会略低于HashSet的性能,但是在迭代访问Set里的全部元素时将有很好的性能,因为它以链表来维护内部顺序
3.TreeSet类
TreeSet类是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。与Set集合相比,TreeSet还提供了下面几个额外的方法
在这里插入图片描述

4.各Set实现类的选择
HashSet和TreeSet是Set的两个典型实现,但是我们也要清楚如何选择HashSet和TreeSet;
HashSet的性能是要比TreeSet好的(特别是最常用的添加、查询元素等操作),因为TreeSet需要额外的红黑树算法来维护集合元素的次序。只有当需要一个保持排序的Set时,才应该使用TreeSet,不然的话,一般都是使用HashSet
HashSet还有一个子类:LinkedHashSet,对于普通的插入、删除操作,LinkedHashSet比HashSet要略微慢一点,这主要是由维护链表带来的额外开销造成的,但就是因为有了链表,遍历LinkedHashSet会更快
Set的实现类HashSet、TreeSet都是线程不安全的。如果有多个线程同时访问一个Sat集合,并且有一个线程修改了该Set集合,就必须手动保证该Set集合的同步性。通常可以通过Collections工具类的SynchronizedSortedSet方法来“包装”该Set集合
在这里插入图片描述
Queue队列:
Queue:基本上,一个队列就是一个先入先出(FIFO)的数据结构
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接口
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值