Day09-Java进阶-集合体系通用遍历方式List集合数据结构ArrayList-LinkedList

embedded/2024/10/22 4:46:11/

1. 集合体系结构

1.1 集合体系结构介绍

1.2 Collection 的使用

java">package com.itheima.domain;import java.util.Objects;public class Student {private String name;private int age;@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && Objects.equals(name, student.name);}public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Student{name = " + name + ", age = " + age + "}";}
}
java">package com.itheima.collection;import com.itheima.domain.Student;import java.util.ArrayList;
import java.util.Collection;public class CollectionTest1 {/*Collection的常用方法:public boolean add(E e) : 把给定的对象添加到当前集合中public void clear() : 清空集合中所有的元素public boolean remove(E e) : 把给定的对象在当前集合中删除public boolean contains(object obj) : 判断当前集合中是否包含给定的对象public boolean isEmpty() : 判断当前集合是否为空pubic int size() : 返回集合中元素的个数(集合的长度)*/public static void main(String[] args) {Collection<Student> c = new ArrayList<>();c.add(new Student("张三", 23));c.add(new Student("李四", 24));c.add(new Student("王五", 25));System.out.println(c.contains(new Student("李四", 24)));System.out.println(c);}private static void method() {// 以多态的形式创建集合对象, 调用单列集合中的共有方法Collection<String> c = new ArrayList<>();c.add("张三");c.add("李四");c.add("王五");boolean b = c.contains("李四");System.out.println(b);System.out.println(c.size());}
}

2. 集合的通用遍历方式

2.1 迭代器遍历

2.2 增强 for 循环

java">package com.itheima.collection;import com.itheima.domain.Student;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;public class CollectionTest2 {/*public Iterator<E> iterator() : 获取遍历集合的迭代器public E next() : 从集合中获取一个元素public boolean hasNext() : 如果仍有元素可以迭代,则返回 true注意: 如果next()方法调用次数过多, 会出现NoSuchElementException*/public static void main(String[] args) {Collection<Student> c = new ArrayList<>();c.add(new Student("张三", 23));c.add(new Student("李四", 24));c.add(new Student("王五", 25));// 1. 获取迭代器 (左边是接口的引用, 右边返回的是实现类对象)Iterator<Student> it = c.iterator();// 2. 循环判断, 集合中是否还有元素while(it.hasNext()){// 3. 调用next方法, 将元素取出Student stu = it.next();System.out.println(stu.getName() + "---" + stu.getAge());}System.out.println("----------------------");// 使用增强for循环遍历集合for (Student stu : c) {System.out.println(stu);}}
}

2.3 foreach 方法

java">package com.itheima.collection;import com.itheima.domain.Student;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.function.Consumer;public class CollectionTest2 {/*public Iterator<E> iterator() : 获取遍历集合的迭代器public E next() : 从集合中获取一个元素public boolean hasNext() : 如果仍有元素可以迭代,则返回 true注意: 如果next()方法调用次数过多, 会出现NoSuchElementException*/public static void main(String[] args) {Collection<Student> c = new ArrayList<>();c.add(new Student("张三", 23));c.add(new Student("李四", 24));c.add(new Student("王五", 25));// 1. 获取迭代器 (左边是接口的引用, 右边返回的是实现类对象)Iterator<Student> it = c.iterator();// 2. 循环判断, 集合中是否还有元素while(it.hasNext()){// 3. 调用next方法, 将元素取出Student stu = it.next();System.out.println(stu.getName() + "---" + stu.getAge());}System.out.println("----------------------");// 使用增强for循环遍历集合for (Student stu : c) {System.out.println(stu);}System.out.println("-----------------------");//foreach方法遍历集合c.forEach(stu -> System.out.println(stu));}
}

3. List集合

java">package com.itheima.collection.list;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;public class ListDemo3 {/*并发修改异常 : ConcurrentModificationException场景: 使用[迭代器]遍历集合的过程中, 调用了[集合对象]的添加, 删除方法, 就会出现此异常解决方案: 迭代器的遍历过程中, 不允许使用集合对象的添加或删除, 那就使用迭代器, 自己的添加或删除方法.删除方法 : 普通的迭代器有添加方法 : 普通迭代器没有, 需要使用List集合特有的迭代器*/public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("眼瞅着你...");list.add("温油");list.add("离开俺们这...");list.add("伤心的人别扭秧歌...");list.add("私奔到东北...");ListIterator<String> it = list.listIterator();while(it.hasNext()){String s = it.next();if("温油".equals(s)){it.add("哈哈");}}System.out.println(list);}
}

4. 数据结构-ArrayLiat-LinkedList

4.1 数据结构介绍

4.2 ArrayList类和LinkedList类

4.2.1 ArrayList类

添加方法源码剖析:

"数值 m >> 1": 意思是数值m向右移动一位, 相当于m/2, 如 : 8 >> 1 = 4. 

4.2.2 LinkedList 类

java">package com.itheima.collection.list;import java.util.LinkedList;public class LinkedListDemo {/*LinkedList 特有方法 :public void addFirst(E e) : 头部添加public void addLast(E e) : 尾部添加public E getFirst() : 获取第一个public E getLast() : 获取最后一个public E removeFirst() : 删除第一个public E removeLast() : 删除最后一个*//*LinkedList集合, 底层是双向链表结构, 查找元素的时候会从头, 或者尾部逐步查找但是它属于List系统中的集合, 也可以使用get方法, 根据索引直接获取元素.*/public static void main(String[] args) {LinkedList<String> list = new LinkedList<>();list.add("张三");list.add("李四");list.add("王五");String s = list.get(1);System.out.println(s);}private static void method2() {LinkedList<String> list = new LinkedList<>();list.add("张三");list.add("李四");list.add("王五");list.add("赵六");System.out.println(list.getFirst());System.out.println(list.getLast());list.removeFirst();list.removeLast();System.out.println(list);}private static void method1() {LinkedList<String> list = new LinkedList<>();list.addFirst("张三");list.addFirst("李四");list.addFirst("王五");list.addFirst("赵六");System.out.println(list);}
}

http://www.ppmy.cn/embedded/10564.html

相关文章

OpenCV轻松入门(九)——使用第三方库imgaug自定义数据增强器

安装命令&#xff1a;pip install imgaug 代码实现&#xff1a; import cv2 import random import matplotlib.pyplot as pltfrom imgaug import augmenters as iaa # 数据增强——缩放效果 def zoom_img(img):# 获取一个1-1.3倍的线性图像处理器&#xff0c;scale参数是缩放范…

AWS账号注册以及Claude 3 模型使用教程!

哈喽哈喽大家好呀&#xff0c;伙伴们&#xff01;你听说了吗&#xff1f;最近AWS托管了大热模型&#xff1a;Claude 3 Opus&#xff01;想要一探究竟吗&#xff1f;那就赶紧来注册AWS账号吧&#xff01;别担心&#xff0c;现在注册还免费呢&#xff01;而且在AWS上还有更多的大…

pytest使用 pytest-rerunfailures 插件实现失败用例重跑功能

使用 pytest 进行测试时&#xff0c;你可以通过安装并配置 pytest-rerunfailures 插件来实现失败用例重跑功能。以下是一个示例说明&#xff1a; 假设你有一个测试文件 test_example.py 包含如下测试用例&#xff1a; import pytestpytest.mark.parametrize("num",…

可视化看板有那么多应用场景,该如何快速搭建?可视化工具该如何选择?

在当今的信息化时代&#xff0c;数据已经成为了现代决策的核心。无论是企业战略规划、运营管理&#xff0c;还是个人生活决策&#xff0c;数据都扮演着至关重要的角色。随着数据分析技术和工具的不断进步&#xff0c;数据在决策中的作用将变得更加突出&#xff0c;对组织和个人…

MySQL 8.0性能优化实战培训

课程介绍 【云贝独家】MySQL 性能优化进阶课程&#xff0c;引领你的职业巅峰&#xff01; 同学们&#xff0c;你们是否被各种工作中的性能问题困扰&#xff1f;是否渴望提升自己在MySQL数据库方面的技术能力&#xff0c;掌握最新最前沿的技术知识呢&#xff1f; 我们讲师为你带…

流量反作弊算法简介

参考&#xff1a;流量反作弊算法实践 1. 背景 阅读记录阿里流量作弊的风控文章。甄别阿里妈妈逾千亿商业流量中作弊 与 低质量的部分&#xff0c;保护广告主和平台的利益是风控团队的核心工作之一。 2. 广告风控流程 广告主投放内容与风控团队、下游业务团队的简易交互流程如…

TaskWeaver使用记录

TaskWeaver使用记录 1. 基本介绍2. 总体结构与流程3. 概念细节3.1 Project3.2 Session3.3 Memory3.4 Conversation3.5 Round3.6 Post3.7 Attachment3.8 Plugin3.9 Executor 4. 代码特点5. 使用过程5.1 api调用5.2 本地模型使用5.3 添加插件 6. 存在的问题与使用体验6.1 判别模型…

计算机网络【第一章】

目录 1.1、什么是因特网 ①描述因特网的具体构成 ②根据为分布式应用提供的联网基础设施来描述 网络协议 1.2、 网络边缘 接入网 1、家庭接入&#xff1a;DSL、电缆、FTTH、拨号和卫星 2、企业接入&#xff08;和家庭接入&#xff09;&#xff1a;以太网和WiFi 3、广域…