ArrayList VS Vector
两个类都实现了List接口,他们都是有序集合,相当于一个动态数组,数据允许重复。
1.同步性:
Vector是线程安全的,即线程同步。多线程访问,安全性高。
ArrayList是线程不安全的,即线程不同步。单线程访问使用,效率更高一些。
2.数据增长:
两者都有初始容量大小
Vector默认增长为原来的两倍。
ArrayList默认增长为原来的1.5倍。
HashMap Vs HashTable
HashMap是HashTable的轻量级实现,都继承了Map接口
1.是否允许空值:
HashMap允许空(null)键值(key)
HashTable不允许空
2.同步性:
HashMap 线程不安全,(非同步)执行效率高。
HashTable线程安全,(同步)执行效率较低。
3.方法改变
HashMap把HashTable的contains方法去掉改成了containsValue和containsKey。
4.HashTable基于陈旧的Dictionary类,HashMap是java1.2引进的Map接口的一个实现。
List VS Map
List:存储单列数据集合, 数据有顺序,允许重复。
Map :存储键和值双列数据集合,数据无顺序,不能重复,值可以重复。
List 、Map、 Set三个接口存取元素特点
List 和 Set具有相似性,都是单列元素的集合,有一个共同的父接口Collection
Set不允许元素重复,Set集合的add方法有一个boolean返回值
Set取元素没法说取第几个,只能以Iterator接口取得所有元素,再逐一遍历
List有先后顺序,可以使用get(index i)来明确说明取第几个。
Map是双列集合,拥有put(obj key,obj value)方法,每次存储,要存键值对
不能存储重复的key,可以get(obj key)返回值为key所对应的value
HashSet按照hashcode值的某种运算方式进行存储,而不是按照hashCode值大小进行存储。
LinkedHashSet按插入的顺序存储。
set方法:add,remove,contains iterator方法
map方法:put,remove,contains
list方法:get(index i) iterator方法
ArrayList,Vector, LinkedList的存储性能和特性
ArrayList,Vector采用数组方式存储数据,都允许直接按照序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引快,插入慢。
Vector使用synchronized方法,性能比ArrayList差
LinkedList采用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时,只需要记录本项的前后项即可,所以插入速度快。
LinkedList也是线程不安全的。LinkedList提供了一些方法,使得LinkedList被当成堆栈来使用。