码迷,mamicode.com
首页 > 编程语言 > 详细

java集合之collection

时间:2018-07-01 01:07:33      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:添加元素   对象   tco   返回   arraylist   个数   java   安全   保存   

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

标签:添加元素   对象   tco   返回   arraylist   个数   java   安全   保存   

原文地址:https://www.cnblogs.com/gsqc/p/9249167.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!