java集合框架面试,容器 面试题
如何解决写爬虫IP受阻的问题?立即使用。
java 容器都有哪些?(推荐学习:java常见问题)
Collection 和 Collections 有什么区别?
Java.util.Collection是一个集合接口(集合类的顶级接口)。它为集合对象上的基本操作提供了一个通用接口方法。集合接口在Java类库中有很多具体的实现。
集合接口的意义是为各种具体的集合提供最大限度的统一操作方式,它的直接继承接口是List和Set。
Collections是collection类的工具类/帮助类,它提供了一系列静态方法,用于集合中元素的排序、搜索和线程安全。
List、Set、Map 之间的区别是什么?
HashMap 和 Hashtable 有什么区别?
HashMap移除了HashTable的contains方法,但是添加了containsValue()和containsKey()方法。
hashTable是同步的,HashMap是异步的,比HashTable更高效。
HashMap允许空键值,但是hashTable不允许。
如何决定使用 HashMap 还是 TreeMap?
HashMap是在Map中插入、删除和定位元素等操作的最佳选择。但是,如果需要遍历一组有序的键,TreeMap是更好的选择。根据集合的大小,向HashMap添加元素可能会更快。将映射更改为TreeMap,以遍历有序键。
说一下 HashMap 的实现原理?
HashMap概述:HashMap是基于哈希表的Map接口的异步实现。这个实现提供了所有可选的映射操作,并允许使用空值和空键。这个类不保证映射的顺序,尤其不保证顺序不变。
HashMap的数据结构:在java编程语言中,有两种基本结构,一种是数组,一种是模拟指针(引用)。所有的数据结构都可以用这两种基本结构来构造,HashMap也不例外。HashMap实际上是一种“链表hash”的数据结构,即数组和链表的组合。
当我们把一个元素放入Hashmap时,首先根据键的hashcode重新计算哈希值,然后根据哈希值得到这个元素在数组中的位置(下标)。如果数组在这个位置已经存储了其他元素,那么这个位置的元素将以链表的形式存储,新添加的放在链的开头,第一个放在链的末尾。如果数组中的这个位置没有元素,该元素将被直接放置在数组中的这个位置。
注意,Jdk 1.8优化了HashMap的实现。当链表中的节点超过八个时,链表将变为红黑树以提高查询效率,从原来的O(n)变为O(logn)
说一下 HashSet 的实现原理?
HashSet底层由HashMap实现。
HashSet的值存储在HashMap的键中。
HashMap的值统一为PRESENT。
ArrayList 和 LinkedList 的区别是什么?
最明显的区别是ArrrayList的底层数据结构是array,支持随机访问,而LinkedList的底层数据结构是双向循环链表,不支持随机访问。使用下标访问元素。ArrayList的时间复杂度是O(1),而LinkedList是O(n)。
如何实现数组和 List 之间的转换?
Convert List toArray:调用ArrayList的toArray方法。
将数组转换为列表:调用数组的asList方法。
ArrayList 和 Vector 的区别是什么?
Vector是同步的,但是ArrayList不是。但是,如果您试图在迭代期间对列表进行更改,则应该使用CopyOnWriteArrayList。
ArrayList比Vector快,不会因为同步而过载。
ArrayList更加通用,因为我们可以通过使用Collections tool类轻松获得同步列表和只读列表。
Array 和 ArrayList 有何区别?
Array可以保存基本类型和对象,而ArrayList只能保存对象。
数组在指定的大小之后是不可变的,而ArrayList的大小是可变的。
Array没有ArrayList那么万能,比如addAll,removeAll,iterator。
在 Queue 中 poll()和 remove()有什么区别?
Poll()和remove()都从队列中获取元素,但是当获取元素失败时,poll()将返回null,而remove()将在失败时抛出异常。
哪些集合类是线程安全的?
Vector:比arraylist多了一个同步机制(线程安全),现在不推荐,因为效率低。在web应用中,尤其是首页,效率(页面响应速度)永远是优先考虑的。
Stat: statck类,FIFO。
Hashtable:它只是比hashmap多一个线程安全。
枚举:枚举,相当于迭代器。
迭代器 Iterator 是什么?
迭代器是一种设计模式,它是一个对象,可以在一个序列中遍历和选择对象,开发者不需要知道序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它们的成本更低。
Iterator 怎么使用?有什么特点?
Java中的迭代器函数很简单,只能单向移动:
(1)使用Iterator()方法要求容器返回一个迭代器。第一次调用迭代器的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,由Collection继承。
(2)使用next()获取序列中的下一个元素。
(3)使用hasNext()检查序列中是否有元素。
(4)使用remove()删除迭代器新返回的元素。
迭代器是Java迭代器最简单的实现。为List设计的ListIterator有更多的功能。它可以从两个方向遍历列表,还可以在列表中插入和删除元素。
Iterator 和 ListIterator 有什么区别?
迭代器可以用来遍历集合和列表,但是ListIterator只能用来遍历列表。
迭代器只能向前遍历集合,ListIterator可以向前也可以向后。
ListIterator实现了迭代器接口,还包含了其他功能,比如添加元素、替换元素、获取前后元素的索引等等。以上是java容器常见面试问题的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。