Java中集合的分析

Java中集合分为Collection和Map:

1.Collection常用的一些接口和类:

Collection派生出三个子接口List,Set,Queue;

List:存放有序可重复元素

Queue:队列(api的介绍为在处理元素前用于保存元素的collection)

Set:存放无序不可重复元素

实现List接口的集合主要有Vector,ArrayList,LinkedList,Stack;

ArrayList:

动态数组,允许任何符合规则(指定的泛型)的元素插入(包括null),ArrayList有很多构造方法,若是不指定ArrayList的容量,则在第一次添加数据时会进行调整,如果调用的是add方法时,会将容量扩充至10;当存放的元素达到10个时,不会扩容,当存放第十一个元素时,容量会扩容至之前容量的1.5倍,下面是ArrayList源码中扩容代码:

vector:

与ArrayList相似,它的操作与ArrayList几乎一样,但是vector是线程安全的动态数组,ArrayList则不是;所以在单线程任务中使用Arraylist提高效率,在多线程任务中使用Vector,不用额外的线程安全考虑;

Stack:

stack继承vector,实现一个后进先出的堆栈,stack提供5个额外的方法,使得vector可以被当作堆栈使用;push(压入)pop(弹出)peek(得到栈顶元素)empty(判空)search(检测一个元素在堆栈中的位置)

LinkedList

可以根据索引访问集合元素,此外因为LinkedList实现了List接口也实现了Deque接口,还可以当作双端队列来使用

ArrayList和LinkedList的区别:ArrayList内部以数组形式保存集合的元素,LinkedList内部以链表的形式存放集合的元素,因此,ArrayList便于随机访问,LinkedList便于插入删除

Queue派生接口Deque,类PriorityQueue:

Deque:双端队列

PriorityQueue:优先队列

Deque:

一个线性 collection,支持在两端插入和移除元素。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。

PriorityQueue:

一个基于优先级堆的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的Compartor 进行排序,具体取决于所使用的构造方法。优先级队列不允许使用 null 元素。

 

set的几个常用实现类HashSet,LinkedHashSet,TreeSet,EnumSet

HashSet:

按照Hash算法存储元素,具有良好的存取和查找性能,HashSet的特点:不能保证元素的顺序,不是线程同步的,集合的元素可以为null

LinkedHashSet:

是HashSet的子类,具有HashSet的特性,但它使用链表维护元素的添加顺序,因此性能低于HashSet,便于迭代访问

TreeSet:

TreeSet是SortedSet接口的实现类,可以保证元素处于排序状态,采用红黑树的数据结构存储集合元素

EnumSet:

专为枚举类设计的集合类,不允许添加null,集合元素有序,以枚举值在枚举类中定义的顺序决定集合元素的顺序

以上这些Set的实现类都不是线程安全的

 

Map

Map是集合的另外一种接口,它采用键值对Map<K,V>的存储方式,保存具有映射关系的数据,key值不允许重复,可以为空,常用实现类有HashMap,LinkedHashMap,TreeMap

HashMap:

名字带有Hash代表它也是以Hash算法进行存储的,通过K的Hash值找到相应的位置存储V值;与HashMap相似的是HashTable,它俩的关系和ArrayList与Vector的关系一样,HashMap线程不安全,HashTable线程安全

LinkedHashMap:

是HashMap的子类,使用双向链表来维护Key-Value对插入的次序,在迭代访问时有较好的性能

Properties:

是HashTable的子类,它是一个K和V都是String类型的Map,主要用于配置文件的读取

TreeMap:

是SortedMap的是实现类,与TreeSet一样使用红黑树的数据结构,每个<k,v>作为红黑树的一个节点,通过k对节点进行排序

 

Linked***一般保证元素插入的顺序,Tree**一般是对元素进行排序

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值