------- 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中方法都存在的时候,系统会默认按比较器的排序方式来排序...