1,集合和数组的简单对比
- 集合,数组都是对数据进行存储操作的数据结构,简称Java容器
- 数组在存储数据时的特点
- 数组一旦初始化之后,长度就确定了
- 数组一旦定义好之后,其存放的数据类型也就确定了
- 数组在存储数据时的缺点
- 数组一旦初始化之后,长度就确定了
- 数组中提供的方法非常有限,非常不方法,并且效率不高
- 数组存储数据的特点,有序,可重复,对于无序,不可重复的需求不能满足
- 获取数组中实际元素的个数,数组没有对应的方法和属性
- 集合存储的有点
- 解决数组存储数据的缺点
2,Java集合框架概述
-
Java集合可分为Collection和Map两种体系
-
Collection接口:单列数据,定义了存取一组对象的方法的集合
- List:元素有序、可重复的集合
- Set:元素无序、不可重复的集合
-
Map接口:双列数据,保存具有映射关系“key-value对”的集合
-
-
Collection接口继承树
-
Map接口继承树
3,Collection 接口方法
- 添加
- add(Object obj)
- addAll(Collection coll)
- 获取有效元素的个数
- int size()
- 清空集合
- void clear()
- 是否是空集合
- boolean isEmpty()
- 是否包含某个元素
- boolean contains(Object obj):是通过元素的equals方法来判断是否是同一个对象
- boolean containsAll(Collection c):也是调用元素的equals方法来比较的。拿两个集合的元素挨个比较。
- 删除
- boolean remove(Object obj) :通过元素的equals方法判断是否是要删除的那个元素。只会删除找到的第一个元素
- boolean removeAll(Collection coll):取当前集合的差集
- 取两个集合的交集
- boolean retainAll(Collection c):把交集的结果存在当前集合中,不影响c
- 集合是否相等
- boolean equals(Object obj)
- 转成对象数组
- Object[] toArray()
- 获取集合对象的哈希值
- hashCode()
- 遍历
- iterator():返回迭代器对象,用于集合遍历
4,Iterator迭代器接口
-
Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。如果需要创建Iterator 对象,则必须有一个被迭代的集合。
-
集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
-
Iterator接口的方法
- boolean hasNext()
- E next()
- void remove()
-
三个方法的使用案例
代码如下:
Iterator iter = coll.iterator();//回到起点 while(iter.hasNext()){ Object obj = iter.next(); if(obj.equals("Tom")){ iter.remove(); } }
-
迭代器的执行原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xokhgkfG-1652192742586)(C:\Users\Think\AppData\Roaming\Typora\typora-user-images\image-20220508225735372.png)]
- 创建了iterator实例之后就相当于有一个指针对象
- iterator.hasNext():判断是否有下一个元素
- 如果存在下一个元素,则调用next()方法,此时的动作有两个
- 将创建了iterator实例之后生成的指针下移
- 将创建了iterator实例之后生成的指针下移后位置上的元素返回
5,使用 foreach 循环遍历集合元素
-
foreach还可以用来遍历数组。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-49gy2ep2-1652192742588)(C:\Users\Think\AppData\Roaming\Typora\typora-user-images\image-20220508231730661.png)]
-
代码案例
public class ForTest { public static void main(String[] args) { String[] str = new String[5]; for (String myStr : str) { myStr = "aaaaa"; System.out.println(myStr); } for (int i = 0; i < str.length; i++) { System.out.println(str[i]); } } }