18. java 容器都有哪些?
罕用容器的图录:
19. Collection 和 Collections 有什么区别?
- java.util.Collection 是一个汇合接口(汇合类的一个 顶级接口 )。它提供了对汇合对象进行基本操作的 通用接口办法 。Collection 接口在 Java 类库中有很多具体的实现。Collection 接口的意义是为各种具体的汇合提供了最大化的对立操作形式, 其间接继承接口有 List 与 Set。
- Collections 则是汇合类的一个 工具类 / 帮忙类 ,其中提供了一系列 静态方法,用于对汇合中元素进行排序、搜寻以及线程平安等各种操作。
20. List、Set、Map 之间的区别是什么?
21. HashMap 和 Hashtable 有什么区别?
- hashMap 去掉了 HashTable 的 contains 办法,然而加上了 containsValue()和 containsKey()办法。
- hashTable 同步的,而 HashMap 是非同步的,效率上逼 hashTable 要高。
- hashMap 容许空键值,而 hashTable 不容许。
22. 如何决定应用 HashMap 还是 TreeMap?
对于在 Map 中插入、删除和定位元素这类操作,HashMap 是最好的抉择。然而,如果你须要对一个有序的 key 汇合进行遍历,TreeMap 是更好的抉择。基于你的 collection 的大小,兴许向 HashMap 中增加元素会更快,将 map 换为 TreeMap 进行有序 key 的遍历。
23. 说一下 HashMap 的实现原理?
HashMap 概述:HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作,并容许应用 null 值和 null 键。此类不保障映射的程序,特地是它不保障该程序恒久不变。
HashMap 的数据结构:在 java 编程语言中,最根本的构造就是两种,一个是数组,另外一个是模仿指针(援用),所有的数据结构都能够用这两个根本构造来结构的,HashMap 也不例外。HashMap 实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
当咱们往 Hashmap 中 put 元素时, 首先依据 key 的 hashcode 从新计算 hash 值, 杜绝 hash 值得到这个元素在数组中的地位(下标), 如果该数组在该地位上曾经寄存了其余元素, 那么在这个地位上的元素将以链表的模式寄存, 新退出的放在链头, 最先退出的放入链尾. 如果数组中该地位没有元素, 就间接将该元素放到数组的该地位上。
须要留神 Jdk 1.8 中对 HashMap 的实现做了优化, 当链表中的节点数据超过八个之后, 该链表会转为红黑树来进步查问效率, 从原来的 O(n)到 O(logn)
24. 说一下 HashSet 的实现原理?
- HashSet 底层由 HashMap 实现
- HashSet 的值寄存于 HashMap 的 key 上
- HashMap 的 value 对立为 PRESENT
25. ArrayList 和 LinkedList 的区别是什么?
最显著的区别是 ArrrayList 底层的数据结构是数组,反对随机拜访,而 LinkedList 的底层数据结构是双向循环链表,不反对随机拜访。应用下标拜访一个元素,ArrayList 的工夫复杂度是 O(1),而 LinkedList 是 O(n)。
26. 如何实现数组和 List 之间的转换?
- List 转换成为数组:调用 ArrayList 的 toArray 办法。
- 数组转换成为 List:调用 Arrays 的 asList 办法。
27. ArrayList 和 Vector 的区别是什么?
- Vector 是同步的,而 ArrayList 不是。然而,如果你寻求在迭代的时候对列表进行扭转,你应该应用 CopyOnWriteArrayList。
- ArrayList 比 Vector 快,它因为有同步,不会过载。
- ArrayList 更加通用,因为咱们能够应用 Collections 工具类轻易地获取同步列表和只读列表。
28. Array 和 ArrayList 有何区别?
- Array 能够包容根本类型和对象,而 ArrayList 只能包容对象。
- Array 是指定大小的,而 ArrayList 大小是固定的。
- Array 没有提供 ArrayList 那么多功能,比方 addAll、removeAll 和 iterator 等。
29. 在 Queue 中 poll()和 remove()有什么区别?
poll() 和 remove() 都是从队列中取出一个元素,然而 poll() 在获取元素失败的时候会返回空,然而 remove() 失败的时候会抛出异样。
30. 哪些汇合类是线程平安的?
- vector:就比 arraylist 多了个同步化机制(线程平安),因为效率较低,当初曾经不太倡议应用。在 web 利用中,特地是前台页面,往往效率(页面响应速度)是优先思考的。
- statck:堆栈类,先进后出。
- hashtable:就比 hashmap 多了个线程平安。
- enumeration:枚举,相当于迭代器。
31. 迭代器 Iterator 是什么?
迭代器是一种设计模式,它是一个对象,它能够遍历并抉择序列中的对象,而开发人员不须要理解该序列的底层构造。迭代器通常被称为“轻量级”对象,因为创立它的代价小。
32. Iterator 怎么应用?有什么特点?
Java 中的 Iterator 性能比较简单,并且只能单向挪动:
(1) 应用办法 iterator()要求容器返回一个 Iterator。第一次调用 Iterator 的 next()办法时,它返回序列的第一个元素。留神:iterator()办法是 java.lang.Iterable 接口, 被 Collection 继承。
(2) 应用 next()取得序列中的下一个元素。
(3) 应用 hasNext()查看序列中是否还有元素。
(4) 应用 remove()将迭代器新返回的元素删除。
Iterator 是 Java 迭代器最简略的实现,为 List 设计的 ListIterator 具备更多的性能,它能够从两个方向遍历 List,也能够从 List 中插入和删除元素。
33. Iterator 和 ListIterator 有什么区别?
- Iterator 可用来遍历 Set 和 List 汇合,然而 ListIterator 只能用来遍历 List。
- Iterator 对汇合只能是前向遍历,ListIterator 既能够前向也能够后向。
- ListIterator 实现了 Iterator 接口,并蕴含其余的性能,比方:减少元素,替换元素,获取前一个和后一个元素的索引,等等。