初识Java集合
java集合框架图 |
---|
上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。
发现一个特点,上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要是hashNext(),next(),remove()三个方法。它的一个子接口ListIterator在它的基础上又添加了几种方法,主要是add(),previous(),hasPrevious()这三个方法。也就是说如果是实现Iterator接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历后的元素不会再遍历到,通常无序集合实现的都是这个接口,比如HashSet,HashMap;而那些元素有序的集合,实现的一般都是ListIterator接口,实现这个接口的集合可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个元素,比如ArrayList。
还有一个特点就是抽象类的使用。如果要自己实现一个集合类,去实现那些接口的抽象方法会非常麻烦,工作量很大。这个时候就可以使用抽象类,这些抽象类中给我们提供了许多现成的实现,我们只需要根据自己的需求重写一些方法或者添加一些方法就可以实现自己需要的集合类,工作量大大降低。
Iterator、ListIterator接口结构图 |
---|
Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类。类图如下:
Collection、Map类图 |
---|
Iterator(迭代器)
Iterator模式用于遍历所有集合类的元素,他的设计是为了把所有的集合遍历逻辑抽出来,从而避免向客户暴露集合的内部结构。
1、Iterator
所在Java源码包:
接口方法:
提供向后遍历的能力!
2、ListIterator
ListIterator接口是对Iterator的扩展,ListIterator接口继承了Iterator,在Iterator接口的基础上新增了几个方法,让其拥有向后遍历能力的同时也拥有了向前遍历的能力。
所在Java源码包:
接口方法:
上述两个接口无论是向前遍历还是向后遍历,调用next()或者previous()获取下一个元素或者上一个元素获取不到元素了就会直接抛NoSuchElementException异常。