容器 可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。(百度百科)
![8008b821203e475aa1c02159cc7831f6.png](https://i-blog.csdnimg.cn/blog_migrate/e52122b6394307bd3d1f981a5c46902d.jpeg)
![d5e6e1be486b4ef7d755fc460a03a9d8.png](https://i-blog.csdnimg.cn/blog_migrate/6f39dc3682254e6da860947d54ec6634.png)
Notes:
1. 只有 List 的元素可重复
Set 不可重复,是由 equals() 方法判断的。
2. HashTable 线程安全
线程安全是因为 HashTable 的所有方法都加了synchronized关键字
与 ConcurrentHashMap 比较:
HashTable 一次锁住整个 hash 表,但 ConcurrentHashMap 默认含有 16 个桶,一次只锁住一个桶,因此并发性能更好。
3. 红黑树
![c49b6e0dd3f008975a9a760da8a0c302.png](https://i-blog.csdnimg.cn/blog_migrate/a2ebf7bc9d0a6dbad16a1426b55f1e66.png)
红黑树的每个节点非红即黑,除叶节点外,呈黑红相见间的形态,需保证根节点和叶节点必须是黑色。因此,一条路径上不可能出现相邻的两个红色结点,并且从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。如果红黑树比较平衡的话,每次查找的次数就是树的深度。
JDK1.8 以后,put()方法将节点添加至链表尾(以前是链表头),在这时,假如链表长度大于 8,则链表结构将会转化为红黑树结构,并将节点挂载到树上,以提高性能。另外,当其他方法使红黑树的大小小于等于 6 时,红黑树又会转化回链表。
4. List 和数组
Array 和 ArrayList 的区别
Array可以容纳基本类型,ArrayList不行。Array是指定大小的,功能较少(比如addAll、removeAll和iterator等)。
List 和数组相互转换
//List转换为数组
List<String> testList = new ArrayList<String>(){{add("aa");add("bb");add("cc");}};
String[] array2 = testList.toArray(new String[testList.size()]);
//数组转换为 List
List list = new ArrayList<>(Arrays.asList("a", "b", "c"))
5. Queue 中的常用方法
1)入队
- add():队满抛出异常
- offer():队满返回 falce
- put():队满则阻塞
2) 出队
- remove():队空抛出异常
- poll():队空返回 null
3) 查询队头元素
- element():队空抛出异常
- peek():队空返回 null
4) 移除并返回队头元素
- take()
6. 迭代器 Iterator
6-1. 迭代器 Iterator 是什么?
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
6-2. 迭代器 Iterator 如何使用?
(1) 使用方法iterator()要求容器返回一个Iterator。
(2) 使用next()获得序列中的下一个元素。第一次调用时返回序列的第一个元素
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
6-3. ListIterator 实现了 Iterator 接口
ListIterator 专为 List 服务,相比 Iterator 包含更多的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。
本文部分整理参考互联网,此文仅用于个人总结无其他用途。