2.3 List 和 Map、Set 的区别(必会)

List和Set是存储单列数据的集合,Map是存储键值对这样的双列数据的集合;
List中存储的数据是有顺序的(插入顺序),并且值允许重复;
Set中存储的数据是无顺序的(插入顺序),并且不允许重复,但元素在集合中的位置是由元素的hashcode决定,即位置是固定的(Set集合是根据hashcode来进行数据存储的,所以位置是固定的,但是这个位置不是用户可以控制的,所以对于用户来说set中的元素还是无序的)。
Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;

2.4 List 和 Map、Set 的实现类(必会)
(1)Connection接口:(有三个实现类)
List 有序,可重复
ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低, 已给舍弃了
LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
Set 无序,不可重复 (有三个实现类)
HashSet
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
依赖两个方法:hashCode()和equals()
LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一image.png
TreeSet
底层数据结构是红黑树。(唯一,有序)
1. 如何保证元素排序的呢?
自然排序
比较器排序
2.如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定(如果是对象是否相等,可能要重写比较器)
(2)Map接口有四个实现类:
HashMap
基于hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null 键(仅一个), 线程不安全。
HashTable
线程安全,低效,不支持null 值和 null 键;
LinkedHashMap
线程不安全,是HashMap 的一个子类,保存了记录的插入顺序;
TreeMap
红黑树结构,能够把它保存的记录根据键排序,默认是键值的升序排序,线程不安全。
image.png

6.36 HashSet的底层原理
使用的是hashmap,所有的键为set需要存储的值,所有的值为统一的object对象
所以HashSet的底层原理就是HashMap的底层原理

6.17 泛型常用特点
是JDK1.5中引入的特性
参数化类型,不确定的类型,这个类型可以变化
限定集合只能存储一种类型,避免了类型转换异常
泛型只支持引用数据类型

6.18 Collection包结构,与Collections的区别?
Collection是集合类的上级接口,子接口主要有Set 和List。
Collections是针对集合类的一个帮助类,提供了操作集合的工具方法:一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。