java面试之容器篇
1、java常见的容器(数据结构)有哪些?
常见的容器主要有Collection(集合),Map,但是我们常用的String字符串和数组其实也是一种容器,但是该知识点讨论数组和String字符串的意义不大。故不拿出来作比较。
- Collection:Collection是集合类的顶级接口,继承它的接口主要有List,Queue,Set。
1.1 List:List是Collection的一个接口,是有序队列,值可以重复,存和取的顺序是一致的,有索引。list的实现类是Vector,Stack,Arraylist,Linkedlist。 - Arraylist(顺序表):底层是数组结构,增删效率低,查询效率高,线程不安全的异步集合,Arraylist内存是连续的。默认初始长度是10,他的有参构造可以指定初始容量。扩容规则:原来的长度+原来长度的一半。
- Linkedlist(双向链表):底层是链表,查询效率低,增删效率高,线程不安全的异步集合,Linkedlist内存是不连续的。链表不需要初始容量,链表中的每一个元素称之为结点,链表中包含头结点和尾结点,每个结点中都包含的数据有:上一个结点的地址,下一个结点的地址,有节点的pre为null,尾结点的next为null,这就是双向链表。
- Vector(向量):底层是数组,查询效率高,增删效率低,线程安全。默认初始容量为10,向量增量为0,默认扩容规则为:每次扩容都增加原来的一倍。如果向量增量不为0,那么扩容规则就是:原来容量+向量增量。
- Stack(栈):栈结构LIFO,先进后出,(Last In First Out)向数据中添加数据:入栈/压栈,由栈顶向栈底添加。从栈中取出数据:出栈/弹栈,由栈底向栈顶取出。
1.2Queue(队列):先进先出(FIF