常用容器树图

image.png

Map

HashMap和Hashtable的区别

线程安全

HashMap线程不安全,Hashtable线程安全

是否允许null值

HashMap允许,Hashtable不允许

HashMap和TreeMap的区别

HashMap的键是经过hash算法,因此是无序的。TreeMap是基于红黑树的实现,保证了映射按照升序排列关键字。如果想改变TreeMap的默认排序方法,则可以使用带Comparator的构造函数

List

LinkedList底层数据结构

双向循环链表

数组和List互转

  • List转数组:List的toArray()。eg: list.toArray(new Int[0])
  • 数组转List:Arrays.asList()

    ArrayList和Vector区别

    线程安全问题

    ArrayList不是线程安全,但vector使用synchronize修饰方法

    底层数据结构

    底层都是使用数组来存放数据。ArrayList在底层数组不够用时在原来的基础上扩展0.5倍,Vector是扩展1倍。

    Array和ArrayList区别

  • Array是数组,大小固定;ArrayList是列表,大小可以调整

  • Array可以存储基本类型和对象,但ArrayList只能存储对象类型
  • ArrayList较Array功能更加丰富

    Queue

    Queue中poll()和remove()区别

  • 相同点:都是从队列中取出一个元素

  • 不同点:当队列为空时,poll()返回null,remove()则抛出异常

    Queue中add()和offer()区别

  • 相同点:都是往队列中插入一个元素

  • 不同点:当队列满时,add()返回false,而offer()抛出异常

    Queue中peek()和elememt()区别

  • 相同点:都是查看队列的第一个元素

  • 不同点:当队列为空时,peek()返回null,而element()抛出异常

    集合类中哪些是线程安全的

    除了vector,Hashtable外,Stack(继承自Vector)和Enumeration也是线程安全的

    枚举类是线程安全的吗?为什么

    反编译后,可以发现枚举类实际上是继承了Enum类,并且是final类型的。
    如:public enum Day{}反编译后是:public final class Day extends java.lang.Enum。同时,

    static类型的属性会在类被加载之后被初始化,当一个Java类第一次被真正使用到的时候静态资源被初始化、Java类的加载和初始化过程都是线程安全的

因此,枚举类是线程安全的。

Iterator是什么?

迭代器是一种设计模式,可以遍历并选择序列中的对象,而开发不需要了解该序列的底层结构。