一,Iterable接口(集合的最顶层)
1.实现iterable接口的类可以拥有增强for循环.
2.实现iterable接口的集合类必须提供一个名为iterator()的方法,该方法的返回值为iterator.
iterator方法:
remove():该方法可以删除由next()最新返回的项
hasNext():是否存在下一项
nex():获取下一项
二.Collection(继承Iterable接口)
collection接口下java.util包下常用的方法列表:
size():返回集合中的项数
isEmpty():判断集合中是否为空
contains(Object):判断集合中是否包含某项
add(E):从集合中添加某项
remove(Object):从集合中删除某项
iterator():遍历集合
clear():
Collection有三个子类型:
1.List (特点:可以添加重复的元素,有顺序)
List也有两个子类:
(1).ArrayList:
优点:get和set调用花费常数时间
缺点:新项的插入和现有项的删除代码代价昂贵,除非是在末端进行
(2).LinkedList:
优点:新项的插入和现有的项的删除开销小
缺点:对get和调用昂贵
2.Set(特点:不保存重复的元素,没有顺序)
Set也有两个子类:
(1)HashSet:速度最快,没有明显的顺序保存元素,集合元素可以是null,但只能放入一个null
(2)TreeSet:按照比较结果的升序保存对象
(3)LinkedHashSet:按照被添加的顺序保存对象
3.Queue(特点:先进先出)
Queue、Message、Looper、Handler之间的关系
容易碰见有关java集合的面试题:
1,ArrayList和LinkList的区别?
ArrayList(数组结构):
优点:get和set调用花费常数时间,也就是查询的速度快;
缺点:新项的插入和现有项的删除代价昂贵,也就是添加删除的速度慢
LinkedList(链表结构):
优点:新项的插入和和现有项的删除开销很小,即添加和删除的速度快
缺点:对get和set的调用花费昂贵,不适合做查询
2,Collection接口的remove()方法和Iterator接口的remove()方法区别?
①性能方面
Collection的remove方法必须首先找出要被删除的项,找到该项的位置采用的是单链表结构查询,单链表查询效率比较低,需要从集合中一个一个遍历才能找到该对象;
Iterator的remove方法结合next()方法使用,比如集合中每隔一项删除一项,Iterator的remove()效率更高
②容错方面
在使用Iterator遍历时,如果使用Collection的remove则会报异常,会出现ConcurrentModificationException,因为集合中对象的个数会改变而Iterator 内部对象的个数不会,不一致则会出现该异常
在使用Iterator遍历时,不会报错,因为iterator内部的对象个数和原来集合中对象的个数会保持一致
3,怎样将一个数组转成List,有什么方法?
数组转list,可以使用Arrays.asList(数组),例如
List转数组,使用list.toArray(),例如
5,HashSet、TreeSet、LinkedHashSet区别?
可以从集合的使用场合回答面试官
①.在Map中插入、删除和定位元素,HashMap是最好的选择
②.需要集合有排序功能,使用TreeMap更好
③.需要按照插入的顺序存储集合,使用LinkedHashMap
6,HashMap、TreeMap、linkedHashMap区别?
可以从集合的使用场合回答面试官
①.在Map中插入、删除和定位元素,HashMap是最好的选择
②.需要集合有排序功能,使用TreeMap更好
③.需要按照插入的顺序存储集合,使用LinkedHashMap