内容学习于:edu.aliyun.com
1. Java类集简介
如果说现在项目之中需要保存一组对象的时候,那么很明显对象数组是最为原始的基础支持,但是也必须清楚对象数组存在的最大问题在于:长度固定( 现实的开发之中很难确定具体的长度),而且对于数组内容的处理操作比较麻烦,例如:如果要进行对象数组中的内容删除,随后再将新的内容添加到空白的位置上,这样的实现也非常复杂了,正是因为如此,在实际的项目之中就必须通过其它的途径来改善对象数组的问题,于是才有了链表的数据结构。
需要理智的去看待对象数组的问题,即便对象数组有再多的缺陷,实际上它本身也有一些非常好的优势。对象数组属于Java语言的原生支持(简单),另外其根据索引实现的数据查询性能是“O(1)”, 如果要是根据内容查询,在没有进行优化的情况下,它的性能是“O(n)",而如果使用了二分法(前提:排序),那么它的时间复杂度是“log2n",如果要使用此类的方式排序或查找就需要通过Comparable比较器来实现了。
- 链表出现的目的是为了解决对象数组长度限制的问题,所以利用对象的引用关系的结构变化了,实现多个对象内容的动态的
添加、删除、查询等操作的支持,但是对于之前的链表操作本身也存在有如下的问题: - 链表的数据查询性能为“O(n)”,如果要想针对于链表进行优化,那么–定也需要排序,而后利用跳表结构;
- 链表的开发难度较高,而且要想开发出一套稳定的链表需要长期的不断维护:
在进行链表开发的时候还需要充分的考虑到多线程的同步处理问题,以及出现不同步时的错误响应。
在链表的基础上如果要想进一步进行性能提升,则可以使用树的结构来实现,但是对于树的结构又非常麻烦,因为需要始终维护着树的平衡性,因为一旦丧失平衡性,那么树就成为了链表,而这种红黑的开发和维护非常繁琐。
正是因为如此,所以在 Java之中提供了一套非常完善的动态对象数组的实现机制: Java 类集。
2. Collection集合接口
javactil.Cllction接口是单值集合操作的最大父接口,每一次只向集合之中保存一一个对象, 在之前实现的链表结构每一次都只是进行单个对象的存储,实际上这就属于单值操作集合,此类定义如下:
- public interface Collection extends Iterable {}
Collection是属于Iterable 接口的子接口,Iterable 是在JDK 1.5之后提供的一个可迭代的标准型接口,而后在Collection 接口下面又分为若干个子接口: List (允许重复)、Set (不允许重复)、SortedSet (不允许重复且排序)、Queue(队列)
如下图所示:
Collection作为最大的单值父接口基本上在现代的开发之中已经很少使用,最早的Collection被大量的直接应用在了EJB 技术之中,但是后来由于设计的更加严谨性,所以在现代的开发之中都大量的使用了Collection子接口,在Collction父接口里面定义有如下的一些常用方法。
NO. | 方法名称 | 类型 | 描述 |
---|---|---|---|
01 | <mark>boolean add(E e)</mark> | 普通 | 向集合中追加数据 |
02 | boolean addAll(Collection<? extends E> c) | 普通 | 向集合中追加一组数据 |
03 | void clear() | 普通 | 清空集合 |
04 | boolean contains(Object o) | 普通 | 数据查询,需要equals()支持 |
05 | <mark>Iterator iterator()</mark> | 普通 | 获取Iterator接口实例 |
06 | boolean remove(Object o) | 普通 | 数据删除,需要equals()支持 |
07 | int size() | 普通 | 集合中数据保存的个数 |
08 | Object[] toArray() | 普通 | 将集合以对象数组形式返回 |
在以上所给出的方法里面最为重要的两个方法:add()、iterator(),最需要注意的就是contains()与remove()因为都需要对象比较的支持。