当前位置: 首页 > news >正文

Javase 基础加强 —— 03 集合

本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。

集合是一种容器,类似于数组,用来存储数据。

在这里插入图片描述

Collection单列集合:每个元素包含一个值

Map双列集合:每个元素包含一对键值对

在这里插入图片描述

01 Collection 集合特点

List系列集合:添加的元素是有序、可重复、有索引的。

  • ArrayList、LinkedList:有序、可重复、有索引

Set系列集合:添加的元素是无序、不重复、无索引的。

  • HashSet:无序、不重复、无索引
  • LinkedHashSet:有序、不重复、无索引
  • TreeSet:默认升序、不重复、无索引

02 Collection 常用功能

在这里插入图片描述

03 Collection 三种遍历方式

① 迭代器遍历

迭代器是用来遍历集合的专用方式,代表为Iterator

在这里插入图片描述

在这里插入图片描述

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class TraversalDemo {public static void main(String[] args) {//迭代器遍历 IteratorCollection<String> names = new ArrayList<>();names.add("张三");names.add("李四");names.add("王五");System.out.println(names);Iterator<String> it = names.iterator();while(it.hasNext()){String ele = it.next(); //先取数,再移位System.out.println(ele);}}
}

在这里插入图片描述

② 增强for循环

在这里插入图片描述

for(String name : names){System.out.println(name);
}

Lambda表达式

names.forEach(s -> System.out.println(s));

04 三种遍历方式的区别

遍历集合的同时又存在增删集合元素的行为时可能出现业务异常,这种现象被称之为并发修改异常问题

需求:

假如购物车中存储了Java入门,宁夏枸杞,黑枸杞,人字拖,特级枸杞,枸杞子,现在用户不买枸杞,选择批量删除。

分析:

ArrayList集合表示购物车,存储商品名称

② 遍历集合,删除包含“枸杞”的数据

③ 输出集合

package CollectionDemo;import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("Java入门");list.add("宁夏枸杞");list.add("黑枸杞");list.add("人字拖");list.add("特级枸杞");list.add("枸杞子");System.out.println(list);//正着遍历for(int i=0; i<list.size(); i++){String name = list.get(i);if(name.contains("枸杞")){list.remove(name);i--; //退一步,防止漏掉元素}}System.out.println(list);//反着遍历for(int i=list.size()-1; i>=0; i--){String name = list.get(i);if(name.contains("枸杞")){list.remove(name);}}System.out.println(list);//迭代器遍历Iterator<String> it = names.iterator();while(it.hasNext()){String name = it.next();if(name.contains("枸杞")){it.remove(); //iterator自己方法删除}}System.out.println(list);//注:for循环和lambda都无法解决并发修改异常问题}
}

05 List 集合

在这里插入图片描述

在这里插入图片描述

package CollectionDemo;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class ListDemo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");list.add("赵六");list.add("钱七");System.out.println(list);list.add(2, "赵敏"); //根据下标插入System.out.println(list);System.out.println(list.remove(1)); //根据下标删除,返回删除数据System.out.println(list);System.out.println(list.set(2, "金毛")); //根据下标修改,返回修改数据System.out.println(list);System.out.println(list.get(0)); //根据下标获取System.out.println("———————————————————四种遍历方法————————————————————");//1.for循环for(int i=0; i<list.size(); i++){System.out.println(list.get(i));}//2.迭代器Iterator<String> it = list.iterator();while(it.hasNext()){System.out.println(it.next());}//3.增强for循环for(String name : list){System.out.println(name);}//4.Lambda表达式list.forEach(name -> System.out.println(name));}
}

06 List 集合底层原理

在这里插入图片描述

ArrayList底层是基于数组存储数据的

LinkedList底层是基于链表存储数据的

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

LinkedList新增方法

在这里插入图片描述

LinkedList应用场景之一:设计队列

在这里插入图片描述

LinkedList应用场景之二:设计栈

在这里插入图片描述

package CollectionDemo;import java.util.LinkedList;
import java.util.List;public class LinkedListDemo {public static void main(String[] args) {LinkedList<String> queue = new LinkedList<>();//入队queue.addLast("张三");queue.addLast("李四");queue.addLast("王五");queue.addLast("赵六");System.out.println(queue);//出队queue.removeFirst();queue.removeFirst();System.out.println(queue);System.out.println("*******************************");LinkedList<String> stack = new LinkedList<>();//压栈stack.push("张三");stack.push("李四");stack.push("王五");stack.push("赵六");System.out.println(stack);//弹栈stack.pop();stack.pop();System.out.println(stack);}
}

07 案例:电影信息管理模块

需求:开发一个电影信息管理模块,用户可以上架电影,查询电影下架某部电影,以及下架某个主演参演的全部电影

分析:① 设计电影类,创建电影对象

② 设计电影操作类,创建集合存储所有电影对象

在这里插入图片描述

相关文章:

  • nt!MiSessionAddProcess函数分析和nt!MmSessionSpace全局变量的关系
  • 基于注解脱敏+链路追踪traceId 快速定位错误
  • VSCode常用插件推荐
  • 普通IT的股票交易成长史--20250504实盘记录
  • 什么是unordered_map?用大白话说
  • GitLab CI/CD变量使用完全指南
  • 《奇迹世界起源》:宝箱工坊介绍!
  • 2025-04-26-利用奇异值重构矩阵-美团
  • 日本人工智能发展全景观察:从技术革新到社会重构的深度解析
  • 研0大模型学习(第11天)
  • AUTOSAR图解==>AUTOSAR_SWS_V2XManagement
  • Y1模拟一 补题报告
  • Electron 从零开始:构建你的第一个桌面应用
  • 状态值函数与状态-动作值函数
  • SQL手工注入(DVWA)
  • n8n 构建一个 ReAct AI Agent 示例
  • Dify 完全指南(一):从零搭建开源大模型应用平台(Ollama/VLLM本地模型接入实战)》
  • QT聊天项目DAY07
  • MPI,Pthreads和OpenMP等并行实验环境配置
  • n8n 快速入门2:构建自动化工作流
  • 取消了“仅退款”,商家就可以高枕无忧了吗?
  • 视频丨英伟达总裁黄仁勋:美勿幻想AI领域速胜中国
  • 新能源车盈利拐点:8家上市车企去年合计净利854亿元,多家扭亏
  • 建设银行南昌分行引金融“活水”,精准灌溉乡村沃土
  • 江西德安回应“义门陈遗址建筑被没收”:将交由规范的义门陈相关社会组织管理
  • 何立峰出席驻沪中央金融机构支持上海建设国际金融中心座谈会并讲话