专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 2020年Java继承面试题

2020年Java继承面试题

更新时间:2020-01-03 15:12:17 来源:赢咖4 浏览2423次


2020年Java继承面试题


  1、List、Set、Map是否继承自Collection接口?


  List、Set 是,Map 不是。Map是键值对映射容器,与List和Set有明显的区别,而Set存储的零散的元素且不允许有重复元素(数学中的集合也是如此),List是线性结构的容器,适用于按数值索引访问元素的情形。


  2、阐述ArrayList、Vector、LinkedList的存储性能和特性。


  ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。Vector中的方法由于添加了synchronized修饰,因此Vector是线程安全的容器,但性能上较ArrayList差,因此已经是Java中的遗留容器。


  LinkedList使用双向链表实现存储(将内存中零散的内存单元通过附加的引用关联起来,形成一个可以按序号索引的线性结构,这种链式存储方式与数组的连续存储方式相比,内存的利用率更高),按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。


  Vector属于遗留容器(Java早期的版本中提供的容器,除此之外,Hashtable、Dictionary、BitSet、Stack、Properties都是遗留容器),已经不推荐使用,但是由于ArrayList和LinkedListed都是非线程安全的,如果遇到多个线程操作同一个容器的场景,则可以通过工具类Collections中的synchronizedList方法将其转换成线程安全的容器后再使用(这是对装潢模式的应用,将已有对象传入另一个类的构造器中创建新的对象来增强实现)。


  3、Collection和Collections的区别?


  Collection是一个接口,它是Set、List等容器的父接口;Collections是个一个工具类,提供了一系列的静态方法来辅助容器操作,这些方法包括对容器的搜索、排序、线程安全化等等。


  4、List、Map、Set三个接口存取元素时,各有什么特点?


  List以特定索引来存取元素,可以有重复元素。


  Set不能存放重复元素(用对象的equals()方法来区分元素是否重复)。


  Map保存键值对(key-value pair)映射,映射关系可以是一对一或多对一。


  Set和Map容器都有基于哈希存储和排序树的两种实现版本,基于哈希存储的版本理论存取时间复杂度为O(1),而基于排序树版本的实现在插入或删除元素时会按照元素或元素的键(key)构成排序树从而达到排序和去重的效果。


  5、List和Set区别


  Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。


  HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快TreeSet :TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。


  List的特征是其元素以线性方式存储,集合中可以存放重复对象。


  ArrayList() : 代表长度可以改变得数组。可以对元素进行随机的访问,向ArrayList()中插入与删除元素的速度慢。LinkedList(): 在实现中采用链表数据结构。插入和删除速度快,访问速度慢。


  6、LinkedHashMap和PriorityQueue的区别


  PriorityQueue 是一个优先级队列,保证最高或者最低优先级的的元素总是在队列头部,但是 LinkedHashMap 维持的顺序是元素插入的顺序。当遍历一个 PriorityQueue 时,没有任何顺序保证,但是 LinkedHashMap 课保证遍历顺序是元素插入的顺序。


  7、WeakHashMap与HashMap的区别是什么?


  WeakHashMap 的工作与正常的 HashMap 类似,但是使用弱引用作为 key,意思就是当 key 对象没有任何引用时,key/value 将会被回收。


  8、ArrayList和LinkedList的区别?


  最明显的区别是 ArrrayList底层的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构是双向循环链表,不支持随机访问。使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。


  相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。


  LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。


  9、ArrayList和Array有什么区别?


  Array可以容纳基本类型和对象,而ArrayList只能容纳对象。


  Array是指定大小的,而ArrayList大小是固定的


  10、ArrayList与Vector区别


  ArrayList和Vector在很多时候都很类似。


  两者都是基于索引的,内部由一个数组支持。两者维护插入的顺序,我们可以根据插入顺序来获取元素。ArrayList和Vector的迭代器实现都是fail-fast的。ArrayList和Vector两者允许null值,也可以使用索引值对元素进行随机访问。


  以下是ArrayList和Vector的不同点。


  Vector是同步的,而ArrayList不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用CopyOnWriteArrayList。ArrayList比Vector快,它因为有同步,不会过载。ArrayList更加通用,因为我们可以使用Collections工具类轻易地获取同步列表和只读列表。


2020年Java继承面试题


      以上就是赢咖4注册机构小编介绍的“2020年Java继承面试题”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


相关推荐


最新最全java面试题及答案(初级到高级)


史上最全的中高级JAVA工程师面试题及答案汇总


Java高级开发工程师面试题


2019史上最全java面试题题库大全800题


哪有资深java工程师面试题


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>