Java是面向对象的语言,如果想要把对象存储起来就需要容器!在Java2出现之前,Java就有了一些专门的类如Dictionary,Vector,Stack和Properties去存储和操作对象组。但是这些的少了一个集中的,统一的主题。所有也就有了我们的类集(Collection)。
Collectiont体系与功能
collection发展到现在体系已经特别大了,底下也多了很多的子接口和实现类。(下面列上一些比较经常使用到的)
而我们真正需要掌握的其实也就是下面实现类,便是我们最常用到的。
collection接口是构造类集的基础,它声明了所有类集都拥有的核心方法。需要注意的是当类集不能被修改时,其中的一些方法会引起UnsupportedOperationException异常。当一个对象与另一个不兼容,也就是将一个不兼容的对象加入一个类集中时,将产生ClassCastException。(所有后来就有了我们的泛型)
关于具体方法的定义我就不介绍了,很多从方法名都可以看出来具体是用来做什么功能的。
同时我们去看源码的话,可以发现我们的collection也有父接口,它继承了迭代器(Iterable)。
迭代器(Iterable)
什么是迭代器?它为我们提供了对集合遍历的功能!所以所有可以遍历的集合都可以使用迭代器。在我们后面的List也会去定义它的子接口ListIterator,然后在ArrayList中去实现。在后面也会再次介绍!
List接口
List接口扩展了Collection并声明存储一系列元素的类集的特性。使用一个基于零的下标,元素可以通过它们在列表中的位置被插入和访问。一个列表可以包含重复的元素!
除了父接口的核心方法,List也多了许多自己定义的方法,这里看看就好,都有相关的介绍!
我们在上面也提到了List也定义了一个迭代器的子接口。主要是用于List的实现类去实现调用!
List的实现类主要有很多,不过我们通常都只说下面这三个,也是因为比较常见的原因!
- ArrayList(底层数据结构是数组。线程不安全)
- LinkedList(底层数据结构是链表。线程不安全)
- Vector(底层数据结构是数组。线程安全)
Set接口
set的方法比List的少,下面实现的实现类和子接口也挺多的。比较重要的就是下面三个实现类
- HashSet(底层数据结构是哈希表,利用的是HashMap的key唯一性)
- TreeSet(底层数据结构是红黑树(一个自平衡的二叉树),保证了数据的排序方式)
- LinkedHashSet(底层数据结构由哈希表和链表组成)
总结
关于这两个接口后面会独自再开一篇博客各自介绍下面三个重要的实现类!
参考资料
Core Java
Java 3y公众号文章
网友评论