Java Collection复习整理
来源:互联网 发布:表格数据不多 格式大 编辑:程序博客网 时间:2024/06/07 23:49
1. Collection框架(咦为啥图片看不见。。。)
2. ArrayList
(1) ArrayList介绍:
a) ArrayList 继承了AbstractList,实现了List。提供了相关的添加、删除、修改、遍历等功能。
b) ArrayList 实现了RandomAccess接口,Cloneable接口,java.io.Serializable接口。支持随机访问,克隆和序列化。
c) ArrayList线程安全性:ArrayList中的操作不是线程安全的(区别于Vector)。在单线程中使用ArrayList,在多线程中可以选择Vector或者CopyOnWriteArrayList。
(2) 数据结构与源码分析
a) 通过一个数组去保存数据(Object[]类型数组,elementData),默认容量是10。
b) 容量不足以容纳全部元素时,新的容量=原始容量*3/2+1。
c) 克隆函数实现全部元素克隆到数组中。ArrayList写入输出流时,先写容量,再写每一个元素。读输入流时,先读容量再读每一个元素。
(3) 遍历方式:随机访问、循环遍历、迭代器(Iterator和ListIterator)。
3. LinkedList
(1) LinkedList介绍:
a) LinkedList 是一个继承于AbstractSequentialList的双向链表。
AbstractSequentialList 实现了get(int index)、set(int index, E element)、add(int index, Eelement) 和 remove(int index)这些函数。
b) LinkedList 实现 List 接口,能对它进行队列操作。
c) LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
d) LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
e) LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
f) LinkedList 是非同步的。
(2) LinkedList数据结构:size、Node first、Nodelast
(3) 源码分析:
a) 顺序访问高效,随机访问效率低(get()方法是在List接口中定义的,LinkedList实现了List接口,所以也是可以随机访问的。)具体实现:实现了根据索引值来获取、删除节点的函数(size为计数索引值,比较get(location)中location和链表长度的一半比决定是从链表头还是链表尾开始查找。)
b) 不存在容量不足的问题。
c) 可以作为队列和栈。
(4) 遍历方式:
迭代器、随机访问(效率超低)、foreach(效率最高)、pollFirst()/pollLast()/removeFirst()/removeLast()
4. Vector。
(1) Vector介绍:
a) Vector 继承了AbstractList,支持相关的添加、删除、修改、遍历等功能。
b) Vector 实现了RandmoAccess接口,实现了Cloneable接口,即实现clone()函数。它能被克隆。
c) Vector是线程安全的。
(2) 数据结构:
a) elementData 是Object[]类型的数组,它保存了添加到Vector中的元素。默认大小10。随着Vector中元素的增加,Vector的容量也会动态增长。
b) elementCount 是动态数组的实际大小。
c) capacityIncrement 是动态数组的增长系数。如果在创建Vector时,指定了capacityIncrement的大小;则每次当Vector中动态数组容量增加时,增加的大小都是capacityIncrement。否则容量增加一倍。
(3) 遍历方式:、随机访问、Enumeration、foreach、迭代器
5. Stack。
(1) Stack介绍:FILO,继承Vector,通过数组实现。
(2) 数据结构:
(3) 源码分析:
a) Stack实际上也是通过数组去实现的。
b) 执行push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。
c) 执行peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。
d) 执行pop时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。
e) Stack继承于Vector,意味着Vector拥有的属性和功能,Stack都拥有。
6. List总结
(1) 框架图(图片不会传啊- -):
(2) 使用场景:
a) 如果涉及栈、队列、链表,考虑用List。
b) 对于需要快速插入,删除元素,应该使用LinkedList。
对于需要快速随机访问元素,应该使用ArrayList。
对于“单线程环境” 或者 “多线程环境,但List仅仅只会被单个线程操作”,此时应该使用非同步的类(如ArrayList)。
对于“多线程环境,且List可能同时被多个线程操作”,此时,应该使用同步的类(如Vector)。
(3) ArrayList与LinkedList:插入/删除元素和随机访问元素的速度对比。
(4) ArrayList和Vector:
相同:都是list(支持Iterator和ListIterator遍历),都支持随机访问和克隆自身,都是通过数组实现。
不同:线程安全性、序列化支持。(Vector没有实现java.io.Serializable接口)、容量增加方式、Vector支持Enumeration遍历。
- Java Collection复习整理
- Java反射复习整理
- 关于java中的collection(整理)
- Collection和Map(Java复习四)
- java再复习——Collection体系
- Java基础复习,整理知识点
- 学习整理——Java集合Collection
- java基础复习-map与collection set+list集合总结
- (四)、Java复习笔记之Collection集合
- java中级理论资料整理复习
- JAVA初学者复习笔记整理(1)
- 全面复习之 java IO整理练习
- java相关基础知识整理复习(二)
- java Collection集合知识点整理(疯狂java讲义读书笔记)
- 【java】【java Collection】Collection
- 【javase复习】## day7 集合Collection ##
- Collection集合框架整理
- Java集合框架复习之Collection接口,iterator接口,iterable接口(二)
- Spark Streaming介绍,DStream,DStream相关操作(来自学习资料)
- hdu 1171 Big Event in HDU
- C++之红黑树(一)
- Spring 实现数据库读写分离
- java多线程
- Java Collection复习整理
- 数据库(第一范式,第二范式,第三范式)
- 进程间通信与线程间通信
- Handler机制分析(2)
- mysql基本sql语句总结(一)
- 机器学习——贝叶斯朴素贝叶斯 知识点与面试总结
- caffe accuracy_layer.cpp 解读
- win7和Ubuntu双系统卸载Ubuntu
- vector,set,map,list,deque的区别与联系