1-集合介绍
1-集合介绍
介绍汇总:
- 为啥要使用集合
- 集合的框架体系
- Collection方法
1-为啥要使用集合
- 之前保存多个数据使用的是数组,那么数组有不足的地方,如下
- 长度开始时必须指定,而且一旦指定,不能更改
- 保存的必须为同一类型的元素(可以使用多态,保存多种类型数据)
- 数组进行扩容比较麻烦,添加或删除元素比较麻烦
- 那么集合可以带来怎样的好处呢
- 可以动态保存任意多个对象,使用比较方便(有自动扩容机制)
- 提供了一系列方便的操作对象的方法:add、remove、set、get等
- 集合添加或删除新元素比较容易
2-集合的框架体系
-
Java的集合类主要分为两大类
- 单列集合
从图中可以得出,Collection 接口有两个重要的子接口 List、Set ,其实现的子类都是单列集合,存放的元素都是一个,而且 List 是有序的,Set 是无序的。
- 双列集合
从图中可以得出,Map 接口的实现子类都是双列集合,存放的元素是两个,为 K-V。
3-Collection方法
- Collection 接口常用方法
// 创建一个类型为数组列表的列表对象
List list = new ArrayList();
// 添加单个元素
list.add("吴彦祖");
list.add("彭于晏");
list.add("杨洋");
list.add(89586);
System.out.println("====列表中的元素有" + list + "====");
// 删除指定元素
list.remove("吴彦祖");
System.out.println("====列表中的元素有" + list + "====");
// 查找某个元素是否被存在
boolean result = list.contains("吴彦祖");
if (result) {
System.out.println("====目标元素存在====");
} else {
System.out.println("====目标元素不存在====");
}
// 获取元素个数
System.out.println("====列表中元素个数为" + list.size());
// 判断列表是否为空
if (list.isEmpty()) {
System.out.println("====列表为空====");
} else {
System.out.println("====列表不为空====");
}
// 清空列表中的数据元素
list.clear();
if (list.isEmpty()) {
System.out.println("====列表为空====");
} else {
System.out.println("====列表不为空====");
}
// 列表中添加多个元素
ArrayList arrayList = new ArrayList();
arrayList.add("水浒传");
arrayList.add("三国演义");
arrayList.add("红楼梦");
list.addAll(arrayList);
System.out.println("====列表中的元素有" + list + "====");
// 查找多个元素是否都存在
list.add("西游记");
boolean containsedAll = list.containsAll(arrayList);
if (containsedAll) {
System.out.println("====目标元素存在====");
} else {
System.out.println("====目标元素不存在====");
}
// 删除多个元素
arrayList.remove("红楼梦");
list.removeAll(arrayList);
System.out.println("====列表中的元素有" + list + "====");
-
Collection 接口遍历元素
-
方式1:使用 Iterator(迭代器)
- Iterator 基本介绍
- Iterator 对象称为迭代器,主要用于遍历 Collection 集合中的元素。
- 所有实现了 Collection 接口的集合类有一个 iterator 方法,该方法返回一个实现了 Iterator 接口的对象,即可以返回一个迭代器。
- Iterator 的所有方法
- 迭代器的执行原理
迭代器执行大致过程为:通过 hasNext 方法判断是否还有下一个元素,有的话则调用 next 方法,如上图所示,会把指针下移,然后将指针下移以后所指的集合位置上的元素返回。一般会搭配 while 函数来完成该遍历过程。
注:在调用 next 方法前必须调用 hasNext 方法进行判断,若不调用,则下一条记录无效,直到 next 方法抛出 NoSuchElementException 异常。
- Iterator 仅用于遍历集合,其本身并不存放对象。
- 实践练习
Collection collection = new ArrayList(); collection.add(new Book("三国演义","罗贯中",10.1)) ; collection.add(new Book("小李飞刀","古龙",5.1)) ; collection.add(new Book("红楼梦","曹雪芹",34.6)) ; // 获取一个迭代器 Iterator iterator = collection.iterator(); System.out.println("<<<<==============>>>>"); // 迭代器遍历集合 while (iterator.hasNext()) { Object next = iterator.next(); System.out.println("====迭代元素为" + next + "===="); } // 迭代器遍历到集合最后一个元素时,继续调用 next() 方法,会抛出 NoSuchElementException 异常 // 要想继续遍历,重新获取一个新的迭代器 // 因为当前是数组列表,所以迭代器无法返回最初位置继续遍历,只能重新获取一个新的迭代器 iterator = collection.iterator() ; System.out.println("<<<<==============>>>>"); // 迭代器遍历集合 while (iterator.hasNext()) { Object next = iterator.next(); System.out.println("====迭代元素为" + next + "===="); }
-
方式2:增强 for 循环
- 基本语法
for ( 元素类型 元素名 : 集合名或数组名 ) { 访问元素 }
- 特点:增强 for 循环就是简化版的 iterator ,本质一样,只能用于遍历集合或数组
- 实践练习
Collection collection = new ArrayList(); collection.add(new Book("三国演义","罗贯中",10.1)) ; collection.add(new Book("小李飞刀","古龙",5.1)) ; collection.add(new Book("红楼梦","曹雪芹",34.6)) ; // 获取一个迭代器 Iterator iterator = collection.iterator(); System.out.println("<<<<==============>>>>"); // 迭代器遍历集合 while (iterator.hasNext()) { Object next = iterator.next(); System.out.println("====迭代元素为" + next + "===="); } // 迭代器遍历到集合最后一个元素时,继续调用 next() 方法,会抛出 NoSuchElementException 异常 // 要想继续遍历,重新获取一个新的迭代器 // 因为当前是数组列表,所以迭代器无法返回最初位置继续遍历,只能重新获取一个新的迭代器 iterator = collection.iterator() ; System.out.println("<<<<==============>>>>"); // 迭代器遍历集合 while (iterator.hasNext()) { Object next = iterator.next(); System.out.println("====迭代元素为" + next + "===="); } System.out.println("<<<<==============>>>>"); // 增强 for 循环代替迭代器 // 增强 for 循环底层仍然是迭代器 // 通过断点,可以发现增强 for 循环会先调用生成迭代器的方法,然后调用迭代器的 hasnext 方法,在调用迭代器的 next 方法 // 增强 for 循环可以理解为简化版的迭代器遍历 for (Object object : collection) { System.out.println("====增强 for 循环元素为" + object + "===="); }
-