21. 请介绍TreeMap的底层原理(

如果需要将key按自然顺序排列甚至是自定义顺序排列,则可以选择TreeMap。

TreeMap基于红黑树实现。映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序。TreeMap的基本操作增删改查,它的时间复杂度是log(N)。

Entry中key比较大小是根据比较器comparator来进行判断的。

22. Map和Set有什么区别?(

Set代表无序的,元素不可重复的集合;

Map代表具有映射关系(key-value)的集合,其所有的key是一个Set集合,即key无序且不能重复。

23. List和Set有什么区别?(

Set代表无序的,元素不可重复的集合;

List代表有序的,元素可以重复的集合。

24. ArrayList和LinkedList有什么区别?(

  1. ArrayList的实现是基于数组,LinkedList的实现是基于双向链表;
  2. 对于随机访问ArrayList要优于LinkedList,ArrayList可以根据下标以O(1)时间复杂度对元素进行随机访问,而LinkedList的每一个元素都依靠地址指针和它后一个元素连接在一起,查找某个元素的时间复杂度是O(N);
  3. 对于插入和删除操作,LinkedList要优于ArrayList,因为当元素被添加到LinkedList任意位置的时候,不需要像ArrayList那样重新计算大小或者是更新索引;
  4. LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。

26. 介绍一下ArrayList的数据结构?(

ArrayList是Java中的一种容器类,它以数组的形式存储对象数据并且能够动态扩展容量。其基于数组实现,所以可以使用下标快速访问其中的元素,相比链表等数据结构,ArrayList在随机访问时更加高效。

ArrayList默认第一次插入元素时创建大小为10的数组,超出限制时会进行扩充容量,因此最好能给出数组大小的预估值。

27. 谈谈CopyOnWriteArrayList的原理(