List、Set、Map三者的区别及总结
List: 对付顺序的好帮手
List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象
Set: 注重独一无二的性质
不允许重复的集合,不会有多个元素引用相同的对象。
Map: 用Key来搜索的专家
使用键值对存储,Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象。


Iterator
- 可以统一的方式对各种集合元素进行遍历
- hasNext() 方法检测集合中是否还有下一个元素
- next() 方法返回集合中的下一个元素
List
存储一组不唯一(可以有多个元素引用相同的对象),有序的对象
- List 是元素有序并且可以重复的集合,称为序列
- List 可以精确的控制每个元素的插入位置,或删除某个位置的的元素
- List 两个主要实现类是 ArrayList 和 LinkedList
ArrayList
- ArrayList 底层是由数组实现
- 动态增长
- 查询快,增删慢,增删元素的时间复杂度近似O(n)
- 线程不安全,效率高
- ArrayList 中的元素可以为 null
- 一般推荐使用 ArrayList

两个集合取交集、并集、差集
- addAll(Collection<? extends E> c) :按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾
实例代码: - retainAll(Collection<?> c): 仅保留此列表中包含在指定集合中的元素。
- removeAll(Collection<?> c) :从此列表中删除指定集合中包含的所有元素。

数组与List之间的转换

Vector 底层是数组,查询快,增删慢,线程安全效率低
LinkedList
- 与ArrayList一样,也按照索引位置排序,底层使用的是双向链表
- 查询慢,增删快,增删元素的时间复杂度不受元素位置的影响,都是近似O(1)
- 线程安全,效率低
- 数据特别多,而且经常需要插入删除元素时建议选用LinkedList
- LinkedList 实现 List 和 Queue 两个接口

Set
元素无序且不可重复的集合,被称为集
HashSet
- HashSet 是 Set的一个重要实现类,称为哈希集或散列集
- HashSet 中的元素无序且不可重复,唯一性
- HashSet 中只允许一个null元素
- 具有良好的查找和存储性能

LinkedHashSet
底层由链表和哈希表组成,由链表保证元素的排序,由哈希表证元素的唯一性
TreeSet
有序,唯一,红黑树(自平衡的排序二叉树)
Map
键值对形式存储
- Map 中的数据是 key-value 形式存储
- key-value 以 Entry 类型的对象实例存在
- 通过 key 可以快速地找到value
- 一个映射不能包含重复的键,但两个Key可以引用相同的对象
- 每个键最多只能映射到一个值
HashMap
- 基于哈希表的 Map 接口的实现(哈希表对键进行散列,Map结构即映射表存放键值对)
- 运行使用 null 值 和 null 键
- key 值不允许重复
- HashMap中的Entry对象是无序排列

LinkedHashMap HashMap的基础上加上了链表数据结构
HashTable 哈希表
TreeMap 红黑树(自平衡的排序二叉树
queue
使用LinkedList对自定义类进行管理


执行结果
[Student{name='Jim', age=19, gender='男'}, Student{name='Lucy', age=19, gender='女'}, Student{name='梅梅', age=18, gender='女'}] |


