Set和List

Set集合比较的是equals()方法,当返回true时,则添加失败


HashSet:HashSet是按hash算法来存储集合里的元素,因此有很好的存取和查找性能


当向HashSet插入元素时,HashSet会调用元素的hashCode()方法,得到hashcode值,然后根据hashcode值来确定元素的存储位置。
如果两个元素的equals比较为true,但是他们的hashCode方法返回值不相等,HashSet将会把他们存储在不相同的位置,依然可以添加成功。
如果两个元素的HashCode值相等,但是equals为false,这样他们存储的位置就相同了,则会把两个元素存储在链表中,而HashSet元素的定位是按照元素的hashcode值定位的,所以这样会导致性能下降
简单的是说HashSet判断两个元素是否相等的是equals相等,HashCode相等。
一般来说当equals()相等时,HashCode()也应该相等,要不就与Set集合的规则不符合了




特点:
1.元素可以是null
2.当多个线程同时访问HashSet的时,必须自己用代码去控制同步问题




LinkedHashSet:也是按hashcode的值来觉得存储位置的,但是他使用的链表来维护次序,所以在迭代时,会按照添加的顺序访问集合里的元素


TreeSet(线程不安全):与HashSet不同的时,他不是采用Hashcode确定存储位置,而是采用红黑树来存储集合的元素,他判断的元素是否相等是通过Compareable接口的compareTo返回值判断的,即使元素的equals返回true也没用。




其他的Set集合大家自己查阅




对于非线程安全的Set我可以使用Collections类的synchronizedSortedSet方法,例如:

SortedSet sort=Collection.synchronizedSortedSet(new TreeSet());




List集合是有序和可重复的


当删除时,判断两个元素是否相等的是通过equals()


ArrayList和Vector都是基于数组实现的List类,但是它们在内部维护的是动态,允许再分配的动态数组,内部使用initialCapacity设置数组的长度


当我们向ArrayList和Vector中添加大量的元素时可以考虑用ensureCapacity(int miniCapacity)一次性增加initialCapacity,减少分配的次数,提高性能,默认是10


工具类:Arrays,    asList(Object ...a):可以把数组转化为一个List集合,但是这个集合的类型是Arrays.ArrayList,是固定长度的,不可增减




Queue接口集合(队尾进队头出)
   |
   ---——PriorityQueue实现类(不是按照进入的顺序,按顺序出来的)
   |
   ————Deque接口(队列和栈都可以)
                       |
                       ------ArrayDeque实现类
                       |
                       ------LinkedList实现类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值