1、集合
1.1、集合的理解和好处
之前保存数据都是用的数组,那么数组有不足的地方,分析如下:
数组缺点:
- 长度开始时必须指定,而且一旦指定,不能更改
- 保存的必须为同一类型的元素
- 使用数组进行增加元素的示意代码 - 比较麻烦 ```java // 写出Person数组扩容示意代码 Person[] pers = new Person[1]; // 大小是1 per[0] = new Person();
// 此时数组已满,增加新的person对象: Person[] pers2 = new Person[pers.length + 1]; for(){} // 循环将pers数组的东西拷进去 pers2[1] = new Person();
// 第二种数组拷贝的方法 使用System.arraycopy()方法 // 源数组 Integer[] integers = new Integer[5]; for (int i = 0; i < integers.length; i++){ integers[i] = i; } // 新的目标数组 Integer[] newIntegers = new Integer[10]; // 参数 1.拷贝源, 2.源的起点, 3.目标, 4.目标的起点, 5.要拷贝多长 // 新的数组中,没有被使用的元素为 null System.arraycopy(integers,0,newIntegers,0,integers.length);
<a name="721a05de"></a>
### 1)集合概念
1. 可以**动态保存**任意多个对象,使用比较方便。
1. 提供了一系列方便的操作对象的方法:add(),remove(),set(),get()
1. 使用集合添加,删除新元素的实例代码更加间接明了
<a name="XW19Q"></a>
## 1.2、Collection继承图
![未命名图片.png](https://cdn.nlark.com/yuque/0/2021/png/12374561/1616313586544-ba8acaea-caa6-4d89-90aa-ea02735513c6.png#height=862&id=iXRVu&margin=%5Bobject%20Object%5D&name=%E6%9C%AA%E5%91%BD%E5%90%8D%E5%9B%BE%E7%89%87.png&originHeight=862&originWidth=1303&originalType=binary&ratio=1&size=185676&status=done&style=none&width=1303)
<a name="35bd751f"></a>
## 1.3、Map继承图
![未命名图片.png](https://cdn.nlark.com/yuque/0/2021/png/12374561/1616394765514-f69320ce-e8a8-4bbe-abba-697946036cef.png#height=791&id=aPVcY&margin=%5Bobject%20Object%5D&name=%E6%9C%AA%E5%91%BD%E5%90%8D%E5%9B%BE%E7%89%87.png&originHeight=791&originWidth=1251&originalType=binary&ratio=1&size=185676&status=done&style=none&width=1251)
<a name="hbeq5"></a>
## 1.4、Collection接口和常用方法
<a name="cMQCU"></a>
### 1)Collection接口实现类的特点
1. collection实现子类可以存放多个元素,每个元素可以是Object
1. 有些Collection的实现类,可以存放重复的元素,有些不可以
1. 有些Collection的实现类,有些事有序的 List, 有些不是有序的Set
1. Collection接口没有直接的实现子类,是通过他的子接口Set和List来实现的。
<a name="ztJOc"></a>
### 2)常用方法
1. **add**(元素) 添加一个元素
1. **remove**(元素) 删除一个元素,返回一个boolean || **remove**(索引) 返回被删除的元素
1. **contains**(元素) 查找该元素是否存在
1. **size**() 获取元素个数
1. **isEmpty**() 判断是否为空
1. **clear**() 清空
1. **addAll**(Collection对象) 添加多个元素
1. **containsAll**(Collection对象) 查找多个元素
1. **removeAll**(Collection对象) 删除多个元素
```java
// 创建一个集合
Collection collection = new ArrayList();
// add() 添加一个元素
collection.add(1);
collection.add(2);
// remove()删除指定元素
collection.remove(1);
// contains() 查找元素是否存在
boolean contains = collection.contains(2);
// size() 获取元素个数
int size = collection.size();
// isEmpty() 判断是否为空
boolean empty = collection.isEmpty();
// clear() 清空集合
collection.clear();
// addAll() 添加多个元素
Collection collection1 = new ArrayList();
collection1.add(11);
collection1.add(22);
collection1.add(33);
collection.addAll(collection1);
// containsAll(Collection对象) 查找多个元素是否都存在
boolean b = collection.containsAll(collection1);
// removeAll(Collection对象) 删除多个元素
collection.removeAll(collection);
注意
- 集合中存储的都是引用地址,往里面存入1 实则是存入 new Integer(1); 自动装箱
3)Collection接口遍历元素方式1 - itreator
基本介绍
- Iterator对象称为迭代器,主要用于遍历Collection集合中的元素
- 所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象,既可以返回一个迭代器。
- Itreator 仅仅用来遍历集合,Iterator本身并不存放对象。