Java集合-24丨集合问题

Posted by jiefang on December 20, 2019

集合问题

List

关于List相关的问题主要有:

  1. ArrayList和LinkedList有什么区别?
  2. ArrayList是怎么扩容的?
  3. ArrayList插入、删除、查询元素的时间复杂度各是多少?
  4. 怎么求两个集合的并集、交集、差集?
  5. ArrayList是怎么实现序列化和反序列化的?
  6. 集合的方法toArray()有什么问题?
  7. 什么是fail-fast?
  8. LinkedList是单链表还是双链表实现的?
  9. LinkedList除了作为List还有什么用处?
  10. LinkedList插入、删除、查询元素的时间复杂度各是多少?
  11. 什么是随机访问?
  12. 哪些集合支持随机访问?他们都有哪些共性?
  13. CopyOnWriteArrayList是怎么保证并发安全的?
  14. CopyOnWriteArrayList的实现采用了什么思想?
  15. CopyOnWriteArrayList是不是强一致性的?
  16. CopyOnWriteArrayList适用于什么样的场景?
  17. CopyOnWriteArrayList插入、删除、查询元素的时间复杂度各是多少?
  18. CopyOnWriteArrayList为什么没有size属性?
  19. 比较古老的集合Vector和Stack有什么缺陷?

Map

关于Map的问题主要有:

  1. 什么是散列表?
  2. 怎么实现一个散列表?
  3. java中HashMap实现方式的演进?
  4. HashMap的容量有什么特点?
  5. HashMap是怎么进行扩容的?
  6. HashMap中的元素是否是有序的?
  7. HashMap何时进行树化?何时进行反树化?
  8. HashMap是怎么进行缩容的?
  9. HashMap插入、删除、查询元素的时间复杂度各是多少?
  10. HashMap中的红黑树实现部分可以用其它数据结构代替吗?
  11. LinkedHashMap是怎么实现的?
  12. LinkedHashMap是有序的吗?怎么个有序法?
  13. LinkedHashMap如何实现LRU缓存淘汰策略?
  14. WeakHashMap使用的数据结构?
  15. WeakHashMap具有什么特性?
  16. WeakHashMap通常用来做什么?
  17. WeakHashMap使用String作为key是需要注意些什么?为什么?
  18. 什么是弱引用?
  19. 红黑树具有哪些特性?
  20. TreeMap就有序的吗?怎么个有序法?
  21. TreeMap是否需要扩容?
  22. 什么是左旋?什么是右旋?
  23. 红黑树怎么插入元素?
  24. 红黑树怎么删除元素?
  25. 为什么要进行平衡?
  26. 如何实现红黑树的遍历?
  27. TreeMap中是怎么遍历的?
  28. TreeMap插入、删除、查询元素的时间复杂度各是多少?
  29. HashMap在多线程环境中什么时候会出现问题?
  30. ConcurrentHashMap的存储结构?
  31. ConcurrentHashMap是怎么保证并发安全的?
  32. ConcurrentHashMap是怎么扩容的?
  33. ConcurrentHashMap的size()方法的实现知多少?
  34. ConcurrentHashMap是强一致性的吗?
  35. ConcurrentHashMap不能解决什么问题?
  36. ConcurrentHashMap中哪些地方运用到分段锁的思想?
  37. 什么是伪共享?怎么避免伪共享?
  38. 什么是跳表?
  39. ConcurrentSkipList是有序的吗?
  40. ConcurrentSkipList是如何保证线程安全的?
  41. ConcurrentSkipList插入、删除、查询元素的时间复杂度各是多少?
  42. ConcurrentSkipList的索引具有什么特性?
  43. 为什么Redis选择使用跳表而不是红黑树来实现有序集合?

Set

关于Set的问题主要有:

  1. HashSet怎么保证添加元素不重复?
  2. HashSet是有序的吗?
  3. HashSet是否允许null元素?
  4. Set是否有get()方法?
  5. LinkedHashSet是有序的吗?怎么个有序法?
  6. LinkedHashSet支持按元素访问顺序排序吗?
  7. TreeSet真的是使用TreeMap来存储元素的吗?
  8. TreeSet是有序的吗?怎么个有序法?
  9. TreeSet和LinkedHashSet有何不同?
  10. TreeSet和SortedSet有什么区别和联系?
  11. CopyOnWriteArraySet是用Map实现的吗?
  12. CopyOnWriteArraySet是有序的吗?怎么个有序法?
  13. CopyOnWriteArraySet怎么保证并发安全?
  14. CopyOnWriteArraySet以何种方式保证元素不重复?
  15. 如何比较两个Set中的元素是否完全一致?
  16. ConcurrentSkipListSet的底层是ConcurrentSkipListMap吗?
  17. ConcurrentSkipListSet是有序的吗?怎么个有序法?

Queue

关于Queue的问题主要有:

  1. 什么是堆?什么是堆化?
  2. 什么是优先级队列?
  3. PriorityQueue是怎么实现的?
  4. PriorityQueue是有序的吗?
  5. PriorityQueue入队、出队的时间复杂度各是多少?
  6. PriorityQueue是否需要扩容?扩容规则呢?
  7. ArrayBlockingQueue的实现方式?
  8. ArrayBlockingQueue是否需要扩容?
  9. ArrayBlockingQueue怎么保证线程安全?
  10. ArrayBlockingQueue有什么缺点?
  11. LinkedBlockingQueue的实现方式?
  12. LinkedBlockingQueue是有界的还是无界的队列?
  13. LinkedBlockingQueue怎么保证线程安全?
  14. LinkedBlockingQueue与ArrayBlockingQueue对比?
  15. SynchronousQueue的实现方式?
  16. SynchronousQueue真的是无缓冲的吗?
  17. SynchronousQueue怎么保证线程安全?
  18. SynchronousQueue的公平模式和非公平模式有什么区别?
  19. SynchronousQueue在高并发情景下会有什么问题?
  20. PriorityBlockingQueue的实现方式?
  21. PriorityBlockingQueue是否需要扩容?
  22. PriorityBlockingQueue怎么保证线程安全?
  23. PriorityBlockingQueue为什么不需要notFull条件?
  24. 什么是双重队列?
  25. LinkedTransferQueue是怎么实现阻塞队列的?
  26. LinkedTransferQueue是怎么控制并发安全的?
  27. LinkedTransferQueue与SynchronousQueue有什么异同?
  28. ConcurrentLinkedQueue是阻塞队列吗?
  29. ConcurrentLinkedQueue如何保证并发安全?
  30. ConcurrentLinkedQueue能用于线程池吗?
  31. DelayQueue是阻塞队列吗?
  32. DelayQueue的实现方式?
  33. DelayQueue主要用于什么场景?

Deque

关于Deque的问题主要有:

  1. 什么是双端队列?
  2. ArrayDeque是怎么实现双端队列的?
  3. ArrayDeque是有界的吗?
  4. LinkedList与ArrayDeque的对比?
  5. 双端队列是否可以作为栈使用?\
  6. LinkedBlockingDeque是怎么实现双端队列的?
  7. LinkedBlockingDeque是怎么保证并发安全的?
  8. ConcurrentLinkedDeque是怎么实现双端队列的?
  9. ConcurrentLinkedDeque是怎么保证并发安全的?
  10. LinkedList是List和Deque的集合体?

总结

  1. 使用的数据结构?
  2. 添加元素、删除元素的基本逻辑?
  3. 是否是fail-fast的?
  4. 是否需要扩容?扩容规则?
  5. 是否有序?是按插入顺序还是自然顺序还是访问顺序?
  6. 是否线程安全?
  7. 使用的锁?
  8. 优点?缺点?
  9. 适用的场景?
  10. 时间复杂度?
  11. 空间复杂度?