集合如图所示:转自 https://blog.youkuaiyun.com/u010887744/article/details/50575735
简单结构图:
-
每个ArrayList实例都有一个容量 。 容量是用于存储列表中的元素的数组的大小。 它总是至少与列表大小一样大。 当元素添加到ArrayList时,其容量会自动增长,即成倍扩容后,扩容后的大小= 原始大小+原始大小/2,调用底部方法在copy.二该方法使用的是system.array.copy(),该方法为原子级方法,效率较高。LinkedList为双向链表,无扩容机制,插入,删除效率高。
-
线程同步写法: List list = Collections.synchronizedList(new ArrayList(...));
详细类图可以参考菜鸟教程 https://www.runoob.com/java/java-collections.html
实际使用中会多用到集合的转换,所以常用集合转换总结如下,很多参考了网络示例:
数组转集合:
String[] arr = {"a","b","c"} List<String> list = Arrays.asList(arr);
集合转数组:
Object[] array = list.toArray(); Set set = new HashSet(Arrays.asList(array));
特别的,泛型集合转换: List<WeekEnum> list = Arrays.asList( WeekEnum.values() ) );
Map类集合除Hashtable外都是非线程安全的,如果想同步的话,根据API1.8描述,可以通过
-
Map m = Collections.synchronizedMap(new HashMap(...));类似方法来达到同步。
Map底层的存储原理为hash算法,以HashMap为例, 初始容量16和默认负载因子(0.75),简单来说就是当map容量达到初始容量乘以负载因子时,map就会rehash为原初始容量的2倍。