使用java集合的 “缺点”
集合不能使用基本数据类型,只能使用对象句柄
在将对象置入一个集合时丢失了类型信息,集合实际容纳的是类型为Object 的一些对象的句柄,但不包含基本数据类型,不存在类型信息,使用之前要进行类型塑造。
集合框架
集合比较
个人总结
如何选择集合:
是否键值对:
是:Map
键是否排序:
是:TreeMap,类似TreeSet
否:HashMap(不知道就使用HashMap),线程不安全,类似hashset。linkedHashMap(有序)继承于它。
Hashtable:线程安全,但是锁定整个表
ConcurrentHashMap:线程安全,使用桶锁
否:Collection
元素唯一:
是:set
元素排序:
是:TreeSet
否:HashSet(不知道用HashSet)
线程安全的结构:
CopyOnWriteArraySet
否:List
安全:
是:Vector(其实不用)
否:ArrayList或者LinkedList
增删多:LinkedList。适合增加删除以及修改的操作,线程不安全,效率高
查询多:ArrayList(不知道就用)。适合随机的查找,增删慢,线程不安全,效率高
两种线程安全的arrayList:
CopyOnWriteArrayList类 (内部是使用lock进行加锁解锁完成单线程访问)
Collections.synchronizedList内部类(使用synchronize关键字,插入比上面的快,数据量10万)