[Java面试题]——容器篇

最近在准备java的面试,在知乎上找到一篇非常好的回答,但是又不想让他在收藏夹里吃灰,所以果断开一个专题来记录里面提到的问题,如果大家也在准备java面试或者想对java有更深的理解,也可以去看看,链接如下:https://www.zhihu.com/question/27858692/answer/787505434
下面的内容都是为了我方便记忆,基本都是照搬,所以大家想看的话直接看链接就好了

java容器有哪些

[Java面试题]——容器篇_第1张图片
[Java面试题]——容器篇_第2张图片

Collection 和 Collections 有什么区别

  • Collection 是一个集合接口(集合类的顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现,它的意义是为各种具体的集合提供最大化的统一操作方式,直接继承的接口有List、Set
  • Collections 是集合类的一个工具类/帮助类,提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作

List、Set、Map之间的区别是什么

比较 List Set Map
继承接口 Collection Collection
元素 可重复 不可重复 键不可重复
顺序 有序 无序(由HashCode决定)
线程安全 Vector线程安全 HashTable线程安全

HashMap 和 HashTable的区别

  • HashMap 去掉了HashTable的contains方法,但是加上了containsValue( ) 和 containsKey( ) 方法
  • HashTable 是同步的,HashMap是非同步的,其效率比HashTable高
  • HashMap允许空键值,HashTable不允许

如何决定使用HashMap还是TreeMap

对于在Map中进行插入、删除以及定位元素这些操作,HashMap是更好的选择;如果需要对一个有序的Key集合进行遍历,TreeMap是更好的选择

HashMap实现原理

  • HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用Null值和Null键。他不保证映射的顺序。
  • HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体
  • 当我们向HashMap中put元素时,首先根据key的hashcode重新计算hash值,根据hash值得到这个元素在数组中的位置下标,如果该位置已经存在元素,那么将会进入该元素位置的链表,新加入的放在链头,如果数组中该位置没有元素,就直接把该元素放在数组的该位置上
  • jdk1.8中对HashMap做了优化,当链表中的结点超过八个之后,该链表会转为红黑树来提高查询效率,从O(n)变为O(logn)

HashSet实现原理

  • HashSet底层由HashMap实现
  • HashSet的值存放于HashMap的key上
  • HashMap的value统一为PRESENT

ArrayList 和 LinkedList的区别

ArrayList底层的数据结构是数组,支持随机访问;LinkedList底层的数据结构是双向循环链表,不支持随机访问,但是在插入、删除等操作上性能更佳

如何实现数组和List之间转换

  • List转换为数组:调用ArrayList的toArray方法
  • 数组转换为List:调用Arrays的asList方法

ArrayList 和 Vector的区别

  • Vector是同步的,ArrayList不是同步的
  • ArrayList比Vector快
  • ArrayList更加通用,可以使用Collections工具类轻易地获取同步列表和只读列表

Array 和 ArrayList的区别

  • Array可以容纳基本类型和对象,ArrayList只能容纳对象
  • Array是指定大小的,ArrayList大小是固定的
  • Array没有提供ArrayList那么多功能

Queue中poll() 和 remove()的区别

poll() 和 remove()都是从队列中取出第一个元素,但是他们对于获取元素异常时的反应不同,poll()会返回空,而remove()会抛出异常

哪些集合类是线程安全的

  • Vector:具有同步化机制,效率较低
  • Stack:堆栈类
  • HashTable:相比于HashMap,支持线程安全
  • enumeration:枚举,相当于迭代器

迭代器Iterator是什么

迭代器是一种设计模式,是一个对象,可以遍历并选择序列中的对象,不需要开发人员了解该序列的底层结构。迭代器通常被称为“轻量级”对象,创建它的代价小

如何使用Iterator,有什么特点

  • iterator()方法要求容器返回一个Iterator。第一次调用Iterator的next()方法时,返回序列的第一个元素。iterator()方法是Iterable接口,被Collection继承
  • 使用next()获取序列中的下一个元素
  • 使用hasNext()检查序列中是否还有元素
  • 使用remove()将迭代器新返回的元素删除
    Java中Iterator功能较简单,只能单向移动

Iterator 和 ListIterator的区别

  • Iterator可以用来遍历List和Set集合;ListIterator只能用来遍历List
  • Iterator只能前向遍历;ListIterator可以双向遍历
  • ListIterator实现了Iterator接口,同时还包含了其他功能,如:增加元素、替换元素、获取前一个元素索引等

你可能感兴趣的:(Java)