java集合之collection

Collection架构层次关系
1.Set (不能有重复元素)
1.1HashSet
1.1.1LinkedHashSet
2.List (必须保持元素特定的顺序)
2.1ArrayList
2.2Vector
2.2.1Stack
2.3LinkedList

3.Queue (保持一个队列(先进先出)的顺序)
3.1PriorityQueue
3.2Deque(接口
3.2.1 ArrayDeque
3.2.2 LinkedList


1.1HashSet
关系:
java.util.HashSet ,继承AbstractSet ,实现Set
原理:
HashSet使用HASH算法来存储集合中的元素,因此具有良好的存取和查找性能。当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据该HashCode值决定该对象在HashSet中的存储位置。
注意:
HashSet集合判断两个元素相等的标准是两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法的返回值相等
--------------------------------------------------------------------------------

1.1.1 LinkedHashSet
关系:
java.util.LinkedHashSet, 继承HashSet ,实现Set
原理:
LinkedHashSet集合也是根据元素的hashCode值来决定元素的存储位置。
但和HashSet不同的是,它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。
注意:
当遍历LinkedHashSet集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里的元素。
LinkedHashSet需要维护元素的插入顺序,因此性能略低于HashSet的性能,但在迭代访问Set里的全部元素时(遍历)将有很好的性能(链表很适合进行遍历)
--------------------------------------------------------------------------------

2.1 ArrayList
关系:
java.util.ArrayList,继承AbstractList ,实现List
原理:
可以动态增长的数组;默认数组的容量为10
特点:
● 随机访问速度快,插入和移除性能较差(数组的特点);
● 支持null元素;
● 有顺序;
● 元素可以重复;
● 线程不安全;
● ArrayList 扩容1.5倍
时间复杂度:
● get() 直接读取第几个下标,复杂度 O(1)
● add(E) 添加元素,直接在后面添加,复杂度O(1)
● add(index, E) 添加元素,在第几个元素后面插入,后面的元素需要向后移动,复杂度O(n)
● remove()删除元素,后面的元素需要逐个移动,复杂度O(n)
--------------------------------------------------------------------------------

2.2 Vector
关系:
java.util.Vector; 继承AbstractList , 实现List
原理:
● 底层由一个可以增长的数组组成
特点:
● 同步类,每个方法前都有同步锁 synchronized
● 线程安全
● 效率比ArrayList低


2.2.1 Stack
关系:
java.util.Stack;继承Vector
原理:
● 基于Vector实现,线程安全
特点:
● 先进后出
--------------------------------------------------------------------------------

2.3 LinkedList
关系:
java.util.LinkedList; 继承AbstractSequentialList,实现List , Deque
原理:
基于链表实现的List;同时它还实现Deque接口,即能将LinkedList当作双端队列使用。也可以到对栈来使用
时间复杂度:
● get() 获取第几个元素,依次遍历,复杂度O(n)
● add(E) 添加到末尾,复杂度O(1)
● add(index, E) 添加第几个元素后,需要先查找到第几个元素,直接指针指向操作,复杂度O(n)
● remove()删除元素,直接指针指向操作,复杂度O(1)


3.1 PriorityQueue
关系:
java.util.PriorityQueue; 继承AbstractQueue
原理:
PriorityQueue的逻辑结构是一棵完全二叉树,存储结构其实是一个数组。
特点:
PriorityQueue并不是一个比较标准的队列实现,PriorityQueue保存队列元素的顺序并不是按照加入队列的顺序,而是按照队列元素的大小进行重新排序
--------------------------------------------------------------------------------

3.2 Deque(接口)
关系:
java.util.Deque; 继承Queue
特点:
Deque接口代表一个"双端队列",双端队列可以同时从两端来添加、删除元素,因此Deque的实现类既可以当成队列使用、也可以当成栈使用
--------------------------------------------------------------------------------

3.2.1 ArrayDeque
关系:
java.util.ArrayDeque;继承AbstractCollection;实现Deque
原理:
基于数组实现
特点:
● 默认容量为16
--------------------------------------------------------------------------------

3.2.2 LinkedList
关系:
java.util.LinkedList; 继承AbstractSequentialList,实现List , Deque

猜你喜欢

转载自www.cnblogs.com/gsqc/p/9241175.html