1-集合先容
先容汇总:
- 为啥要使用集合
- 集合的框架体系
- Collection方法
1-为啥要使用集合
- 之前生存多个数据使用的是数组,那么数组有不敷的地方,如下
- 长度开始时必须指定,而且一旦指定,不能更改
- 生存的必须为同一范例的元素(可以使用多态,生存多种范例数据)
- 数组进行扩容比较麻烦,添加或删除元素比较麻烦
- 那么集合可以带来怎样的利益呢
- 可以动态生存任意多个对象,使用比较方便(有主动扩容机制)
- 提供了一系列方便的操纵对象的方法:add、remove、set、get等
- 集合添加或删除新元素比较容易
2-集合的框架体系
- Java的集合类主要分为两大类
从图中可以得出,Collection 接口有两个重要的子接口 List、Set ,其实现的子类都是单列集合,存放的元素都是一个,而且 List 是有序的,Set 是无序的。
从图中可以得出,Map 接口的实现子类都是双列集合,存放的元素是两个,为 K-V。
3-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 对象称为迭代器,主要用于遍历 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 + "===="); }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |