java集合之collection

Posted 固守青城

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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<E> ,实现Set<E>
原理
HashSet使用HASH算法来存储集合中的元素,因此具有良好的存取和查找性能。当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据该HashCode值决定该对象在HashSet中的存储位置。 注意:
HashSet集合判断两个元素相等的标准是两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法的返回值相等

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

2.1 ArrayList
关系
java.util.ArrayList,继承AbstractList<E>,实现List<E>
原理
可以动态增长的数组;默认数组的容量为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<E>, 实现List<E>
原理
  • 底层由一个可以增长的数组组成
特点:
  • 同步类,每个方法前都有同步锁 synchronized
  • 线程安全
  • 效率比ArrayList低

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

2.3 LinkedList
关系
java.util.LinkedList; 继承AbstractSequentialList,实现List<E>, Deque<E>
原理
基于链表实现的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<E>;
原理
PriorityQueue的逻辑结构是一棵完全二叉树,存储结构其实是一个数组
特点:
PriorityQueue并不是一个比较标准的队列实现,PriorityQueue保存队列元素的顺序并不是按照加入队列的顺序,而是按照队列元素的大小进行重新排序

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

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

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

以上是关于java集合之collection的主要内容,如果未能解决你的问题,请参考以下文章

[Java复习02] 集合框架Collection - 面试题小结

集合框架

java集合之整体架构

Java之------集合

Java之集合

java基础笔记----集合之list集合