一、集合概述
一方面,而向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array(数组)存储对象方面具有一些弊端,而Java集合就像一种容器,可以动态地把多个对象的引用放入容器中。
说明:此时的存储,都是指的内存层面的存储,不涉及持久化(硬盘)的存储(.txt, .jpg, . avi , 数据库等媒介)
1、数组在内存存储方面的特点:
(1)数组初始化以后,长度就确定了。(不可对长度进行修改)
(2)数组声明的类型,就决定了进行元素初始化时的类型。(一旦定义好,其元素的类型也就确定了,只能操作指定类型)
2、数组在存储数据方面的弊端:·
(1)数组初始化以后,长度就不可变了,不便于扩展
(2)数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高。同时无法直接获取存储元素的个数
(3)数组存储的数据是有序的、可以重复的,而且存储数据的特点单一;对于无需,不可重复的需求,不能满足
为了解决上述弊端,Java集合应运而生。
☆ Java集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。
二、集合分类
1、Java集合可分为Collection和Map两种体系
(1)Collection接口:单列集合,用来存储一个一个的对象
List子接口: 存储有序、可重复的数据的集合,习惯将List系列称为“动态”数组,因为长度可变
Set子接口: 存储无序、不可重复的数据的集合,Set系列就类似数学里面的集合
下图实现是继承关系,虚线是实现关系
(2)Map接口:双列集合,用来存储一对一对的数据,保存具有映射关系"key-value对”的集合。 类似数学里面函数:y=f(x)
三、集合框架中的接口和实现类
3.1 Collection接口 此接口规定的方法,他的所有实现类都必须要实现
1、Collection接口定义的抽象方法(只定义,交给实现类去实现)
(1)add(Object e): 添加元素e到集合去。 数字也可以,因为会自动装箱成相应的类对象
(2)size():获取添加元素的个数
(3)equals(Object obj):判读当前集合元素和形参集合元素是否相等。注意:有序 和 无序的 实现类 效果是不同的
(4)iterator():获取Iterator接口的实例,用于遍历集合元素
等等等等 查字典
特别注意:向Collection接口的实现类对象中添加数据obj时,要求在obj所在的类重写equals()方法,确保是比较数据内容。如果不重写,会调用父类的Object的equals()方法,是比地址,就不对。
3.2 Iterator接口 集合的遍历
1、迭代器简介
(1)lterator对象称为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素。
(2)GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。类似于“公交车上的售票员”、“火车上的乘务员”、“空姐”
(3)Collection接口继承了java.lang.lterable接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了lterator接口的对象。
(4)lterator仅用于遍历集合, Iterator本身并不提供承装对象的能力。如果需要创建lterator对象,则必须有一个被迭代的集合。
(5)集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
2、迭代器的方法 查字典
(1)remove() 和 next() 方法
(2)remove()方法
注意:
- Ite