容器
18. java 中容器都有哪些?
19. Collection 和 Collections 有什么区别?
-
- Collection 是以一个集合的接口(集合的顶尖接口)。它提供了对集合对象的基本操作。意义是为了各种具体的集合提供了最大化的同统一操作方法。 - Collections 则是集合类的一个工具类,其中提供了一系列的静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。
20. List、Set、Map 之间的区别是什么?
21. HashMap 和 Hashtable 有什么区别?
-
- hashTable 是线程安全(同步)的,而 hashMap 是非线程(安全)同步的,效率必 hashTable 要高。 - hashMap 允许空键值对,而 hashTable 不允许。
22. 如何决定使用 HashMap 还是 TreeMap?
对于在 Map 中插入、删除和定位元素这类操作,HashMap 是最好的选择。然而,假如你需要对一个有序的 key 集合进行遍历,TreeMap是更好的选择。基于你的 Collection 的大小,也许向 HashMap 中添加元素会更快,将 map 换为TreeMap 进行有序 key 的遍历。
23. 说一下 HashMap 的实现原理?
-
- HashMap 是基于哈希表来实现的。提供了所有可选的映射操作,并允许使用 null 值 和 null 键。 - HashMap 数据结构:HashMap 实际上是一个“链表散列”的数据结构,底层是使用数组和链表实现的 。 - Jdk 1.8 中对HashMap 的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为 红黑数 来提高查询效率。
24. 说一下 HashSet 的实现原理?
-
- HashSet 底层是由 HashMap 实现的。 - HashSet 的值存放于 HashMap 的 key(键) 上 。 - HashMap 的 value(值)统一为 present(静态常量)。
25. ArrayList 和 LinkedList 的区别?
ArrayL 的底层的数据结构是数组,支持随机访问,而 LinkedList 的数据结构是双向循环的链表,不支持随机访问。使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。
26. 如何实现数组和 List 之间的转换?
-
- List 转换成为数组:调用 ArrayList 的 toArray 方法。 - 数组转换成为 List:调用 Arrays 的 asList 方法。
27. ArrayList 和 Vector 的区别是什么?
-
- Vector 是线程安全(同步)的,而 ArrayList 不是。 - ArrayList 必 Vector 快,因为它有线程同步,不会发生过载。 - ArrayList 则更加通用,因为我们可以使用 Collections 工具类轻易地获取同步列表和只读列表。
28. Array 和 ArrayList 有何区别?
-
- Array 可以容纳基本数据类型和对象,而 ArrayList 只能容纳对象。 - Array 是指定大小的,而 ArrayList 大小是国定的。 - Array 没有提供 ArrayList 那么多功能,比如 说 addAll、removeAll 和 iterator 等。
29. 在 Queue 中 poll() 和 remove() 有什么区别?
poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回 空,而 remover() 失败的时候会抛出异常。
30.哪些集合类是线程安全的?
-
- Vector:就比 ArrayList 多了个同步化机制(线程安全),因为效率较低,所有现在不推荐使用。 - Statck:堆栈类,先进先出。 - HashTable:就比HashMap 多了个线程安全。 - Enumeration:枚举,相当于迭代器。
31. 迭代器 Iterator 是什么?
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
32. Iterator 如何使用?有什么特点?
Java中的Iterator功能比较简单,并且只能单向移动: - 使用方法iterator()要求容器返回一个lterator。 - 第一次调用Iterator的next()方法时,它返回序列的第一个元素。 - 注意:iterator()方法是java.lang.lterable接口,被Collection继承。 - 使用next()获得序列中的下一个元素。 - 使用hasNext()检查序列中是否还有元素。 - 使用remove()将迭代器新返回的元素删除 lterator是Java迭代器最简单的实现,为List设计的Listlterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
33. Iterator 和 ListIterator 有什么区别?
-
- Iterator 可用来遍历 Set 和 List 集合,但是 ListIterator 只能用来遍历 List。 - Iterator 对集合只能是前向遍历,ListIterator 既可以向也可以后向。 - ListIterator 实现了 Iterator 接口,并包含其它 的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。