面试题之Java集合中的常见问题
首先要明白集合中各个类接口的关系以及用处:
iterator(迭代器):
1、作用
- 实现接口的类可以拥有增强for循环遍
2、方法
- hasNext():是否拥有下一项
- next():获取下一项
- remove():该方法可以删除最新返回的项(注意:此后不能调用remove,知道对next()再次调用)
Collection接口(java.util):
1、方法:
- size():返回集合中的项数
- isEmpty():判断集合中是否为空
- contains(Object):判断集合中是否包含某项
- clear():清除所有项
- add():从集合中添加某项
- remove(Object):从集合中删除某项
- iterator():遍历集合
面试题:
Collection接口的remove()方法和Iterator接口的remove()方法区别?
①性能方面
Collection的remove方法必须要先找出要被删除的项,由于Collection采用单链表查询效率比较低,需要从集合中一个一个遍历才能找到该对象;
Iterator的remove方法结合next()方法使用,永远删除下一项,故Iterator的remove()效率更高(ps:间隔删除用Iterator更快)
②容错方面
在使用Iterator遍历时,如果使用Collection的remove则会报异常,会出现ConcurrentModificationException,因为集合中对象的个数会改变而Iterator 内部对象的个数不会,不一致则会出现该异常
在使用Iterator遍历时,不会报错,因为iterator内部的对象个数和原来集合中对象的个数会保持一致
总结:两点都记住Iterator厉害一些就好啦
Array与ArrayList有什么区别
①Array是Java中的数组,声明数组有三种方式
②ArrayList是动态数组,也就是数组的复杂版本,它可以动态的添加和删除元素,被称为”集合“,集合的声明如下
可以从三方面回答面试官
①.ArrayList是Array的复杂版本
②.存储的数据类型:Array只能存储相同数据类型的数据,而ArrayList可以存储不同数据类型的数据
③.长度的可变:Array的长度是固定的,而ArrayList的长度是可变的
ps:回答问题要有逻辑性分层回答一目了然
Queue接口(队列):
1、特点
先进先出(想象排队通道)
ps:堆栈为先进后出(子弹夹)
(未完待续)