前言数组
花了点时间对照着JDK1.6树结构 ,作了下面这张图,之后复习方便多了。安全
图中椭圆形的是接口,棕色的长方形是抽象类,蓝色的长方形是普通类;红色线条是实现的接口。Ab是Abstract的简写。数据结构
一、Collection接口有三个子接口 Set,List,Queue。性能
二、为何不直接实现Iterator,而是去实现Iterable?spa
JDK文档中Iterable只有一个方法就是iterator(),这个方法返回一个Iterator对象。因为Iterator进行遍历的时候会记录位置,假如直接取实现Iterator接口的话,遍历的起点不会每次都是开头,没法达到目的,因此须要返回一个Iterator对象。线程
全部的集合类均可以经过这个方法实现遍历。3d
三、Set用来表示一个不包含重复元素的集合,SortedSet进一步提供元素有序的Set,经过天然排序或者创建Set时提供的Comparator进行排序,Iterator遍历时采用升序。code
NavigableSet 为给定搜索目标报告最接近匹配项的导航方法。对象
四、ArrayList与LinkedList有什么区别?blog
ArrayList基于动态数组的数据结构,在随机查找功能上优于LinkedList。
LinkedList基于链表的数据结构,在增长和删除功能上性能更好。
通常的使用的时候,都是用List指向一个具体对象。
五、ArrayList和Vector有什么区别?
ArrayList和Vector都是用数组存储对象的,且实现了List接口,从提供的方法上看很相似,可是也有区别。
首先 ArrayList的方法不是线程安全的,而Vector的全部方法是线程安全的,都使用了synchronized关键字。
其次 在数组增加方式上不一样,当数据量达到默认的临界量后如0.75,这时ArrayList就会增长50%的大小,而Vector 增长一倍的空间。
因为同步会引发很大的系统开销,通常状况下都是使用ArrayList,在须要线程安全的时候使用Vector。
五、Stack的使用
push压栈 pop弹出栈 peek查看栈顶对象而不移出 empty是否为空。
六、Queue的使用
提供了两种添加移出查看的方法
add remove element 假如操做失败会抛出异常
offer poll peek 通常失败会返回false 或者null
具体查看JDK,实现类ArrayDeque和LinkedList
七、Deque "double ended queue" 双端队列,读做"deck"。
第一个元素(头部) | 最后一个元素(尾部) | |||
抛出异常 | 特殊值 | 抛出异常 | 特殊值 | |
插入 | addFirst(e) |
offerFirst(e) |
addLast(e) |
offerLast(e) |
移除 | removeFirst() |
pollFirst() |
removeLast() |
pollLast() |
检查 | getFirst() |
peekFirst() |
getLast() |
peekLast() |
补充面向对象的知识:
一、上面的AbList和ArrayList等都实现了List接口,这样是能够的。
这样作基于两点理由:1)历史的缘由。
2)即便之后AbList再也不实现List,ArrayList仍然实现了List,方便使用。
只要父类implements某一接口,子类彻底继承也能够从新实现该接口;
对于抽象类能够不去实现接口的方法,而是交由具体类去实现,如AbList就能够不去实现List中的方法。