前两天去面试:
面试官:容器了解吗?
我:不太清楚(内心戏:类似与Docker容器这么深层的技术,我就只是听说过,还是直接说不清楚,省的他继续往下问)
后来被毙了,今天想来学习下容器,然而我发现搜到的都是java集合,原来问的不是Docker容器,生无可恋脸!
容器的概念:如果有一个类专门用来存放其它类的对象,这个类就叫做容器,或者就叫做集合
血的教训
那今天就把java常用集合(容器)再总结下:
名称 | 原理 | 特性 | 线程安全 | 优点 | 缺点 | |
List
|
ArrayList | 定长数组实现(超过长度会新建扩容数组后将数据复制到新数组) | 有序,可重复 | 否 | 索引快 | 在增删距离末尾距离长的情况下,效率慢 |
LinkedList | 使用双向链表结构,记录头尾节点及数量 | 有序,可重复 | 否 | 增删快 | 索引距离头尾长的情况下效率慢 | |
Map | HashMap | 定长数组结构,使用Hash散列分布元素,Hash碰撞使用拉链法解决,即每个元素为一个单向链表,对于Hash值一致的多条数据向后追加 | 无序,Key不可重复 | 否 | 增删查快 | 遍历慢 |
LinkedHashMap | 继承HashMap并维护一个双向链表保证有序 | 有序,Key不可重复 | 否 | 增删查遍历快 | 在hashmap的基础上附加了一个双向链表,所以不如HashMap效率高 | |
TreeMap | 红黑二叉树结构 | 有序(非添加顺序,通过大小排序) | 否 | 索引快 |
增删效率慢
|
|
CurrentHashMap | 同HashMap | 无序 | 是(使用volatile保证并发读取可见性,使用synchronized保证操作) | 增删查快 | 遍历慢 |