JAVA SE 基础复习-核心库-Collection---java.util

前言数组

  花了点时间对照着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中的方法。

相关文章
相关标签/搜索