1.集合的安全性
我们可以通过看到ArrayList、HashSet、HashMap的源码,每个方法都没有加锁,线程事实上是不安全的,但Vector和HashTable是线程安全的,它们各自的核心方法添加上了关键字synchronized。
Collections工具类提供了相关的API,可以让上面三个不安全的集合变安全:
// Collections.synchronizedCollection(c)
// Collections.synchronizedList(c)
// Collections.synchronizedMap(c)
// Collections.synchronizedSet(c)
// 以上方法就是相当于在源码上加上了关键字synchronized
2.ArrayList内部用什么实现的
(1)空参构造
ArrayList内部是用Objec[ ]实现的,它的构造、add、remove和clear方法的实现原理又是什么呢?
带参构造1
该构造函数传入一个int值,该值作为数组长度值。如果该值小于0,则抛出一个运行异常。如果等于0,则使用一个空数组,如果大于0,则创建一个长度为该值的新数组。
带参构造2
如果调用构造函数的时候传入了一个Collection的子类,那么先判断该集合是否为null,如果不是则将集合转换为数组,然后将数组赋值为成员变量,将该数组的长度作为成员变量size。
(2)add方法
(3)remove方法
(4)clear方法