1. Java中有哪些集合接口?主要方法?
参考解答
常见集合接口的继承关系如下图:
- Collection 表示数据集合
- 子接口List表示有序集合,可以通过下标来访问集合元素,允许集合内有重复元素
- 子接口Set用来表示无重复元素的集合,集合元素 必须实现hashCode和equals方法
- 子接口SortedSet表示集合元素会排序存储,必须在集合构造时传递Comparator或集合元素实现Comparable接口
- 子接口Queue用来表示单向队列,Deque用来表示双向队列或栈
- Map表示键-值集合,key在集合内不能重复,作为key的对象必须实现hashCode和equals方法
- SortedMap表示键-值存储是会根据key进行排序存储,集合在必须构造时传入Comparator来定义比较规则,或每个key实现Comparable接口来定义比较规则
2. List,Set,Map 是否继承自 Collection 接口?
参考解答
List,Set是;Map不是。
3. Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是 equals()? 它们有何区别?
参考解答
Set里的元素是不能重复的, 用equals()方法来区分重复与否。
需要我们自己根据业务重写equals()方法用来判断两个对象是否“相同”(内容是否相同)
而==判断地址是否相等,用来决定两个变量引用是否指向同一对象。
4. Java中的队列都有哪些,有什么区别?
参考解答
常见的有: Queue:单向队列 Deque:双向队列 BlockingQueue:阻塞队列
5. 下列不继承Collection接口的选项 ( )
A:HashMap
B: ArrayList
C: Set
D: Hashtable
E: LinkedList
参考解答
A,D; HashMap和Hashtable 继承Map接口
6. HashMap和Hashtable的区别?
参考解答
- HashMap和Hashtable均实现了Map接口。
- Hashtable的方法都是同步方法,可以保证线程安全,而HashMap反之。
- Hashtable的key与value均不能为null,而HashMap都可以
7. 说出 ArrayList,Vector, LinkedList 的存储性能和特性?
参考解答
- ArrayList和Vector都是使用数组方式存储数据,内部是通过下标访问数组元素,但是插入、删除元素要涉及数组元素移动,因此随机访问速度快,而插入、删除数据慢
- Vector中所有方法都使用了synchronized方法来保证对象的线程安全,因此性能很差,在新版jdk中已被新的线程安全实现类所取代
- LinkedList使用双向链表实现存储,按下标索引数据需要进行前向或后向遍历,但是插入、删除数据时只需要修改链表引用,所以插入删除速度快,而随机访问速度慢