9.数组和集合的区别
集合:单列集合Collection接口、双列集合Map
| List | Set | Map | |
|---|---|---|---|
| 存储元素的特点 | 有序可重复(下标0开始) | 无序不可重复 | 无序不可重复 |
| ArrayList(非线程安全---数组)、linkedList(非线程安全---双向链表)、Vector(线程安全---数组)、 | HashSet(非线程安全---哈希表)、SortedSet(TreeSet(非线程安全---二叉树)) | HashMap(非线程安全---哈希表)、SortedMap(TreeMap(非线程安全---二叉树))、HashTable(线程安全---哈希表)(Properties(线程安全))、 | |
| 数组 | 集合 |
|---|---|
| 大小固定 | 大小可动态扩展 |
| 只能存储相同数据类型的数据 | 可以存储各种类型的数据 |
| 数组转集合 | 集合转数组 |
| Arrays.asList(数组) | 集合.toArray() |
List
ArrayList(非线程安全---数组)
linkedList(非线程安全---双向链表)
Vector(线程安全---数组)
Set
HashSet(非线程安全---哈希表)
SortedSet(TreeSet(非线程安全---二叉树))
Map
HashMap(非线程安全---哈希表)---最多只允许一条记录的键为Null,允许多条记录的值为Null
----不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导 致数据的不一致。如果需要同步,可以用Collections的synchronizedMap 方法使HashMap具有同步的能力
-----无序
-------hash数组的默认大小是16,而且一定是2的指数
SortedMap(TreeMap(非线程安全---二叉树)-----能够把它保存的记录根据键排序,默认是按升序排序,也可以 指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。)
------有序
HashTable(线程安全---哈希表)------不允许null值,key和value都不可以
------线程同步
-------无序
------hash数组默认大小是11,增加的方式是 old*2+1
(Properties(线程安全))
13.HashTable,TreeMap和HashMap的区别(上图)
14.ArrayList、linkedList、Vector的区别
存储方式:ArrayList和Vector均采用数组,linkedList采用了双向链表
采用数组方式插入数据慢(数组元素移动)、查询速度快(有下标),又因为Vector使用了 synchronized方法-线程安全,其性能要比ArrayList差
双向链表:按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项前后项即可, 插入数据较快
同步性:Vector是同步的(带来性能开销),线程安全的
ArrayList是异步的,线程不安全
建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。



