最近参加了几次java开发面试,有好几个面试官都问了一些基础的问题。我总结了几点,也可以在项目中进行运用
首先我们要知道集合我们常见有五个接口,一个数组
接口一:collection
第一,我们要知道collection的父类是iterable接口,也就是我们常说的的迭代器。
关于实现iterable接口的类 ,这里有两个说明:
1、能够增强for循环,例如我们的forEach循环
2、必须要提供一个返回值为iterable的iterable()方法。
3、常用方法:
①hashNext() :是否存在下一项
②next() :获取下一项
③remove(Oject) :移除
接下就是collection本身的几个方法
①add(E):从集合中添加某项
②contains(Object):判读是否包含某项
③iterator() :集合遍历
④remove():移除(重点:关于此方法与其父类接口【iterable】中remove(Object)的区别: )
最后总结:
collection接口remove()方法与iterable接口remove()方法的区别?
1、性能方法:
collection接口remove()方法采用链表结构,删除某项时有一个遍历集合过程,效率比较低
iterable接口remove()方法使用时会结合其next()方法找到下一项,然后直接删除,效率更高
2、容错方面:
collection接口remove()方法使用后, 集合对象的个数发生改变,当使用iterator进行遍历时,集合的对象与iterator内部对象的个数不一致会出现异常
iterable接口的话,在进行iterator遍历时,原来集合对象个数与iterator内部对象个数一致,不会报错
接口二:List接口
对于List的话,其特点是:可重复,有顺序
其子类有两个:
①ArrayList(数组结构):get/set速度快,用于查询
②LinkedList(链表结构):get/set速度慢,用于增删
那么对于List的话,要注意ArrayList于LinkedList之间的区别?
接口三:set接口
set接口的特点与List接口的特点相反:不重复,无顺序
子类:
①HashSet:常用,速度快,顺序不明显,可有一个null值
②TreeSet:按照比较结果顺序保存对象
③LinkedHashSet:按照插入顺序保存结果
在这里,我们要注意这三种集合的适用的场景
接口四:queue接口
说到queue(管道),我们要联想到message(通信)、Looper(循环)、handler(处理器)
结合项目的话,我们在网上浏览网页的时候,会有两个线程:
主线程:用于UI(页面数据展示)
子线程:负责访问数据库
在子线程访问数据库时:Looper(循环)会将message(通信)会依次添加到queue(管道),然后queue会将数据依次送到子线程中,
由于有可能会发生子线程与主线程发生矛盾的情况,handler(处理器)作为两者的中介,子线程会将数据传给handler(处理器),
再由handler(处理器)传到主线程上
我们还可以将queue与队列以及堆栈进行对比:
queue:同队列一样,数据存取遵循**先进先出**原则
堆栈:先进后出
接口五:Map接口
其子类可与Set接口子类对比
数组:Arrays
说到Array数组,我们可以将它与它的复杂版本ArrayList进行对比
1、Array与ArrayList的区别:
①储存的数据类型:
Array只能放一种数据类型
ArrayList可放多种数据类型,可通过泛型进行绑定数据类型,提高安全性
②长度:
Array不可变
ArrayList可变
2、数组与集合之间的相互转换
数组——>集合:Arrays.asList(数组)
集合——>数组:list.toArray()
总结
我们总结一下:
对于集合,面试官能提到的问题,无非就是以上集合的区别,当面试官问到这类问题的时候,我们可以结合我们的项目加以自己的理解讲给面试官听,一定要记住,不管面试官出什么样的题目,心态不要慌,因为对于程序编程的问题,每个人都有自己的理解,一定要相信自己的答案,但是不能太模棱两可,给面试官以错误的答案
这里我们来补充一些面试官除了上面提及之外可能会提到的问题:
1、List、Set、Map之间的区别:
List:有序,可重复(首页展示页面经常使用,在Controller层转为json格式,再放到页面上)
Set:无序,不可重复(在解决表格之间一对多和多对多的关系中经常使用)
Map:键值对存储值,键唯一,值可重复(就好比我们的联系人,电话号码必须一致,但是联系人可以是重复的名字)
2、HashMap与HashSet的区别:
对于这个问题,我们可以从它们继承的父类进行对比
3、HashMap的工作原理:
关于HashMap的工作原理,不知道的话,我们可以很大方告诉面试官我们没有注意到HashMap的工作原理,
我们只要知道在我们项目中是session的get/set行为就差不多了
关于集合的部分常见面试问题,今天我们就分享到这里(*❦ω❦)