面试题之Java集合中的常见问题

面试题之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:堆栈为先进后出(子弹夹)

 

(未完待续)