【Java总结】——集合(二)之Collection 接口

前言


在之前的一篇博客中简单介绍过一些集合的知识(点我),有需要的可以简单看看,这次主要是针对集合的Collection中的一些常用的实现类做简单的介绍。
Collection接口是List、Set和Queue接口的父接口,该接口里定义的方法既可以用于操作Set集合,也可用于操作List和Queue集合。

Collection接口和继承树


这里写图片描述

HashSet


HashSet是Set接口的典型实现,大多数时候使用Set集合时就是使用这个实现类。HashSet按Hash算法来存储集合中的元素,因此有很好的存取和查找性能。
HashSet特点:

  • 不能保证元素的排序顺序,顺序可能与添加顺序不同,顺序也有可能发生变化。
  • HashSet不是同步的,如果对个线程同时访问一个HashSet,假设有连个或者两个以上线程同时修改了HashSet集合时,则必须通过代码来保证其同步。
  • 集合元素值可以是null。
    当向HashSet集合存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据该hashCode值决定该对象在HashSet中的存储位置。如果有两个元素通过equals()方法比较返回true,但它们的hashCode()方法返回值不相等,HashSet将会把它们存储在不同的位置,依然可以添加成功。

    即,HashSet集合判断两个元素相等的标准是两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法返回值也相等。

TreeSet


TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。

  • HashSet集合采用hash算法决定元素的存储位置。
  • TreeSet采用红黑树的数据结构存储集合元素。

TreeSet支持两种排方法:
- 自然排序
- 定制排序

ArrayList和Vector


ArrayList和Vector是List的两个典型实现,是基于数组实现的List类,二者封装了一个动态的,允许再分配的Object[]数组。
显著区别:

  • ArrayList是线程不安全的
  • Vector集合则是线程安全的
    Vector是一个古老的集合,有很多缺点。Vector是线程安全的,所以Vector的性能比 ArrayList的性能要低。实际上,即时需要保证List集合线程安全,也同样不推荐使用Vector实现类。

Deque接口与ArrayDeque实现类


Deque接口是Queue接口的子接口,它代表一个双端队列,Deque接口里定义了一些双端队列的方法,这些方法允许从两端来操作队列的元素。同时Deque还可以当成来使用。
Deque接口提供了一个典型的实现类:ArrayDeque,它是一个基于数组实现的双端队列,创建Deque时同样可指定一个numElements参数,该参数用于指定Object[]数组的长度;若不指定,Deque底层数组的长度为16。
当程序需要使用“栈”这种数据结构时,推荐使用ArrayDeque,尽量避免使用Stack—Stack是古老的集合,性能较差。

LinkedList实现类


LinkedList类是List接口的实现类,这意味着它是一个List集合,可以根据所引来随机访问集合中的元素。除此之外,LinkedList还实现了Deque接口,可以被当成双端对列来使用,因此即可以被当成“栈”,也可以被当成对列使用。
LinkedList可以作为List集合、双端对列来使用,是一个功能非常强大的集合类。

总结


LinkedList与ArrayList、ArrayDeque的实现机制完全不同,ArrayList、ArrayDeque内部以数组的形式来保存集合中的元素,因此随机访问集合元素时有较好的的性能;而LinkedList内部以链表的形式来保存集合中的元素,因此随机访问集合元素时性能较差,但在插入、删除元素时性能比较出色。
总体来说,ArrayList的性能比LinkedList的性能要好,因此大部分时候都应该考虑使用ArrayList。
虽然Vector也是以数组形式存储集合元素,但因为它实现了线程同步的功能(而且实现机制也不好),所以各方面性能都比较差。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值