黑马程序员_java的集合类(对第十四课collection体系集合的总结)

------- android培训java培训、期待与您交流! ----------


通过今天对java语言中集合类的学习,我来给自己的学习内容做下简单直白的总结:

首先,我来总结下什么是集合?

集合:如果我们把研究对象统称为元素,把一些元素放在一起的总体,就可以称为集合..

在JAVA中,为什么要有集合类呢?

为了方便对多个对象元素的操作,就要对对象进行存储,集合就是存储对象最常用的一种方式..

简单点来说就是:数据多了用对象存储,对象多了就可以用集合来存储...

那也能用来存储对象元素的数组和集合类有什么区别?

1,数组的长度是固定的,集合的长度是不固定的。

2,数组可以存储基本数据类型,集合只能存储对象。

3,数组存储的必须是同一类型,而集合可以存储不同类型..



集合作为一个容器来说,容器也分了很多种..比如说水杯是一种容器,但水杯也分好几种...

所以:java对能存储多个对象元素的容器,进行了划分并描述..划分完的体图:



从图中我们可以看出,将每种容器的共性内容提取出来以后,就形成了一种体系..

由于每一种容器对数据的存储方式都各不相同,所以会出现不同的容器,这种存储方式称为数据结构...


我们先来总结下整个体系的共性内容有哪些:

作为整个体系最顶层的Collection接口:它里面的内容是整个体系都具备的:

方法代码如图:


在这里,需要说下collection接口中的一个重要的取出元素方法:迭代器

迭代器:是用来取出集合中元素的方式..

collection接口中有一个方法:iterator()方法..该方法会返回一个对象..返回是的Iterator接口的子类对象

方法代码如图:



注意:在迭代过程重,不能使用集合对象的方法来操作集合中的元素,只能使用迭代器自己的方法..

所以,在迭代中,只能使用迭代器的方法操作元素...要不,会发生并发修改异常的错误..



List接口的共性内容:在collection接口的方法基础上,凡是能操作角标的方法,都是该体系的特有方法..

List集合的特点:元素是有序的,元素可以重复..因为该集合体系有索引...

List集合的特有方法:如图:




List接口我也总结完了,下面来总结下List接口中,最常见的3个子类对象:

ArrayList类:它的底层是数组结构...特点:查询快,增删慢,线程不同步

LinkedList类:它的底层是链表结构...特点:查询慢,增删快,线程不同步

Vector类:它的底层也是数组结构..特点:线程同步 (元老级了,被ArrayList所替代了)

注意:之所以说Vector,是因为它有个特殊的地方:它在List体系中,多了一种特有的取出方式:枚举

枚举和迭代是一样的,因为枚举的名称和方法名称过长,所以被迭代器所取代了...

扩展:IO当中有一个对象也是元老级的版本了,它当中就用到了枚举..


Arraylist类中的方法和List差不多,这里来特别总结下LinkedList类中的特有方法:如LinkedList li=new LinkedList();

将元素添加在头部:li.addFirst();  

将元素添加在尾部:li.addLast();

JDK升级以后,集合为空的时候为了不抛出异常,就有了替代方法:li.offerFirst()..li.offerLast()..


获取最头部元素:li.getFirst();  如果集合为空,使用该方法会抛异常

获取最尾部元素:li.getLast();如果集合为空,使用该方法会抛异常

JDK升级以后,集合为空的时候为了不抛出异常,就有了替代方法:li.peekFirst()..li.peekLast()..该方法会返回null

注意:它会获取元素,但不会删除元素..


删除最头部元素:li.removeFirst();如果集合为空,使用该方法会抛异常

删除最尾部元素:li.removeLast();如果集合为空,使用该方法会抛异常

JDK升级以后,集合为空的时候为了不抛出异常,就有了替代方法:li.pollFirst()..li.pollkLast()..该方法会返回null

注意:它也能获取到元素,但会删除元素..

扩展:

堆栈结构的特点:先进后出..

队列结构的特点:先进先出..

我们完全可以使用LikendList集合模拟一个堆栈数据结构或队列数据结构..


最后重点:对于List集合来说,判断元素是否相同,依据的是元素的equals方法..

无论是contains()方法还是remove()方法,它们的底层调用的都是equals()方法来判断的..



下满,我来继续总结下collection接口下的令一个字接口:Set接口

该接口中没有特有的方法,和collection接口中的方法一模一样..

Set集合的特点:元素是无序的,元素不可以重复...


我们来看下Set接口中,最常见的2个子类对象:

HashSet类:它的底层是哈希表结构...

HashSet底层是如何保证元素的唯一性呢:是通过2个方法hashCode()方法和equals()方法..

当2个元素的哈希值不相等时,不会调用equals方法..当2个元素的哈希值相等时,才会调用equals方法再比一次

重点:对于HashSet集合来说,判断元素是否存在,以及删除等操作,依据的是元素的hashCode()和equals()...


TreeSet类:可以对set集合中的元素进行排序...它的底层是二叉数...

TreeSet底层是如何保证元素的唯一性呢:compareTo方法 返回的是0,就是相同的元素..

重点:对于HashSet集合来说,判断元素是否存在,以及删除等操作,依据的是元素的compareTo方法,return 0...

这就是TreeSet排序的第一种方式:让元素自身具备比较性,元素需要实现comparable接口,覆盖compareTo方法..

还有TreeSet排序的第二种方式:当元素自身具备的比较性不是所需要的,这时就需要让集合自身具备比较性...我们可以定义一个比较器,将比较器的对象作为参数传递给TreeSet集合的构造函数..(也就是定义一个类,实现comparator接口,覆盖compare方法)

注意:当2中方法都存在的时候,系统会默认按比较器的排序方式来排序...








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值