Java集合--认识类集

内容学习于: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()因为都需要对象比较的支持。

全部评论

相关推荐

牛客279957775号:铁暗恋
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务