常用容器树图
Map
HashMap和Hashtable的区别
线程安全
是否允许null值
HashMap和TreeMap的区别
HashMap的键是经过hash算法,因此是无序的。TreeMap是基于红黑树的实现,保证了映射按照升序排列关键字。如果想改变TreeMap的默认排序方法,则可以使用带Comparator的构造函数
List
LinkedList底层数据结构
数组和List互转
- List转数组:List的toArray()。eg: list.toArray(new Int[0])
-
ArrayList和Vector区别
线程安全问题
ArrayList不是线程安全,但vector使用synchronize修饰方法
底层数据结构
底层都是使用数组来存放数据。ArrayList在底层数组不够用时在原来的基础上扩展0.5倍,Vector是扩展1倍。
Array和ArrayList区别
Array是数组,大小固定;ArrayList是列表,大小可以调整
- Array可以存储基本类型和对象,但ArrayList只能存储对象类型
-
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是什么?
迭代器是一种设计模式,可以遍历并选择序列中的对象,而开发不需要了解该序列的底层结构。