您的位置:首页 > 编程语言 > Java开发

java基础之集合类

2016-04-30 19:56 387 查看
java集合主要由两个接口派生而出:CollectionMap,也就是说Collection和Map是所有集合类的根接口。Iterator也是集合框架的成员,用来遍历Collection集合

Collection接口



Set

无序集合,且元素不可重复,可以说Set就是Collection,只是行为略有不同,即元素不能重复

HashSet

特点

无序

多线程中,两个货以上线程操作一集合,需要程序员手工保证同步

值可为null

HashSet如何保证每次添加的元素不重复?

调用HashCode()方法获得该对象的hashcode,看集合中是否有相同的hashcode,如果有,则表示该对象在集合中已存在;如果没有,则可以插入。

LinkedHashSet

与HashSet相似,也是用hashcode来决定存放位置,不同之处在于LinkedHashSet使用链表来维护元素的次序,因此插入到LinkedHashSet中的元素是有序的,顺序在链表中维护。

TreeSet

是sortedSet的实现类,可以确保元素处于排序状态。因为它的这个特点,因此它相比hashSet增加如下方法:

1、Object first():获取第一个元素

2、Object last():获取最后一个元素

3、Object lower():获取指定元素之前的元素。

4、。。。。。请看源码~

排序方式

1、自然排序

用compareTo(来自comparable接口)方法比较元素大小按升序排序

2、定制排序

即自定义排序方式,可以用lamda表达式来代替Comparable接口

EnumSet

通过枚举值来决定Set顺序

Set性能

hashSet与treeSet谁的性能好?

hashset,因为treeset的顺序需要进行大小比较后才能确定,而hashset省去了这一步。

hashset与linkedhashset的性能呢?

当然是hashset,因为linkedHashSet还需要维护链表哦~

List

有序集合,元素可重复,根据索引来操作集合,所以可以达到有序的效果。

ArrayList和vector

arrayList和vector都是基于数组的,所以他们都分配了一个动态的允许再分配的Object[]数组

vector方法是jdk1.0的时候就有的古老的方法,当时没有考虑到系统的集合框架,所以它提供了很多方法名很长的方法,后来用List替代了,其实和现在用的List并没有区别。而且Vector是线程安全的,因此性能会低,因为它对当前线程加锁,其他只能等待。

ArrayList是线程不安全的,需要程序员手动保证集合同步

LinkedList

public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable


从上面的源码可以看出它实现了List还实现了Deque,因此它具有栈和队列的双重特点。

Queue

队列,“先进先出”,即队列的头部存放时间最长,尾部存放时间最短

Deque

Queue的实现类,是“双端队列“,即两头可以同时怎删数据。

Priority

Queue的实现类,按队列元素的大小进行排序

排序方式

自然排序

定制排序

Map接口



key-value,Map的key类似一个Set集合、value类似List集合可以重复。

HashTable与HashMap

HashTable从jdk1.0开始就有,是线程安全的,性能较低,而HashMap则与前者相反,所以需要程序员手动使集合同步。

LinkedHashMap

笔者感受

Map和Set非常相似,只不过Map是key-value形式的,所以Map处不再赘述。hashset用了map中的key来存放e,因为key可以保证不重复,这样去掉了原始set在存数据之前需要用hashcode进行去重比较的问题,提高了效率

学习之旅刚开始,再接再厉~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 集合