用手机相册教我数组概念——照片分类术[特殊字符][特殊字符]
目录
- 前言
- 一、现实场景
- 1.1 手机相册的照片管理
- 1.2 照片分类的需求
- 二、技术映射
- 2.1 数组与照片分类的对应关系
- 2.2 数组索引与照片标签的类比
- 三、知识点呈现
- 3.1 数组的基本概念
- 3.2 数组在编程中的重要性
- 3.3 数组的定义与初始化
- 3.4 数组的常见操作(增删改查)
- 四、代码实现
- 4.1 使用 Java 实现照片分类
- 4.2 代码解释
- 五、延展思考
- 5.1 当数组不够用时怎么办?
- 5.2 多维数组与多层相册分类
- 5.3 数组与其他数据结构的比较
- 总结
- 数组的核心要点回顾
- 对进一步学习的建议
前言
数组就像实体相册
你有没有遇到过这些崩溃瞬间?
👉 想找去年生日照片,却在相册里翻了半小时
👉 听说数组是编程基础,但总被索引搞到怀疑人生
👉 明明存了3张照片,代码却提示「数组越界」
别慌!今天我们用「手机相册管理」这个真实场景,把数组的索引、遍历、越界问题变成生活常识。就像整理照片一样简单!🎯
一句话总结:数组就是一个「有固定页数的实体相册」,每张照片要按顺序塞进对应页数!
🌟 关于我 | 李工👨💻
深耕代码世界的工程师 | 用技术解构复杂问题 | 开发+教学双重角色
🚀 为什么访问我的个人知识库?
👉 https://cclee.flowus.cn/
✨ 更快的更新 - 抢先获取未公开的技术实战笔记
✨ 沉浸式阅读 - 自适应模式/代码片段一键复制
✨ 扩展资源库 - 附赠 「编程资源」 + 「各种工具包」
🌌 这里不仅是博客 → 更是我的 编程人生全景图🌐
从算法到架构,从开源贡献到技术哲学,欢迎探索我的立体知识库!
一、现实场景
📸 我的相册分类术
1.1 手机相册的照片管理
你的手机相册里可能有成百上千张照片,如果没有分类,找一张特定的照片就像大海捞针。这时候,你会怎么做?没错,你会创建相册分类,比如 “旅行”、“美食”、“自拍” 等。
1.2 照片分类的需求
-
存储:将照片按类别存放。
-
查找:快速找到某张照片。
-
修改:删除或替换某张照片。
-
扩展:新增分类或照片。
这些需求,是不是和数组的功能很像?😏
二、技术映射
📑 数组的三大核心
2.1 数组与照片分类的对应关系
照片分类 | 数组 |
---|---|
相册名称 | 数组名 |
照片 | 数组元素 |
照片编号 | 数组索引 |
2.2 数组索引与照片标签的类比
在数组中,每个元素都有一个唯一的索引(从 0 开始),就像每张照片在相册中都有一个编号。通过索引,你可以快速访问或修改某个元素,就像通过编号找到某张照片一样。
三、知识点呈现
🔢 数组的生存法则
3.1 数组的基本概念
数组是编程中最基础的数据结构之一,它就像是一个固定大小的容器,可以存储多个相同类型的数据。想象一下,数组就像是一个有编号的盒子,每个盒子可以放一个东西,而编号就是数组的索引。
3.2 数组在编程中的重要性
数组在编程中无处不在,无论是存储一组数字、字符串,还是更复杂的对象,数组都能高效地完成任务。它的优势在于:
-
快速访问:通过索引可以直接定位到某个元素。
-
简单易用:语法直观,适合初学者掌握。
-
广泛应用:从算法到实际开发,数组都是不可或缺的工具。
3.3 数组的定义与初始化
在 Java 中,数组的定义和初始化有两种方式:
1.静态初始化:直接指定元素。
String[] photoAlbums = {"旅行", "美食", "自拍"};
2.动态初始化:指定长度,后续赋值。
String[] photoAlbums = new String[3];
photoAlbums[0] = "旅行";
photoAlbums[1] = "美食";
photoAlbums[2] = "自拍";
3.4 数组的常见操作(增删改查)
-
查询:通过索引获取元素。
System.out.println(photoAlbums[0]); // 输出:旅行
-
修改:通过索引修改元素。
photoAlbums[1] = "美食2.0";
-
删除:数组长度固定,无法直接删除元素,但可以通过覆盖实现。
photoAlbums[1] = null; // 将“美食”设为null
-
新增:数组长度固定,无法直接新增元素,但可以通过创建新数组实现。
String[] newAlbums = new String[photoAlbums.length + 1]; System.arraycopy(photoAlbums, 0, newAlbums, 0, photoAlbums.length); newAlbums[newAlbums.length - 1] = "宠物"; photoAlbums = newAlbums;
四、代码实现
💻 相册管理系统
4.1 使用 Java 实现照片分类
以下是一个完整的示例代码,模拟手机相册的照片分类功能:
public class PhotoAlbumManager {public static void main(String[] args) {// 初始化相册数组String[] photoAlbums = {"旅行", "美食", "自拍"};// 查询相册System.out.println("第一个相册:" + photoAlbums[0]);// 修改相册photoAlbums[1] = "美食2.0";System.out.println("修改后的第二个相册:" + photoAlbums[1]);// 删除相册(覆盖)photoAlbums[2] = null;System.out.println("删除后的第三个相册:" + photoAlbums[2]);// 新增相册String[] newAlbums = new String[photoAlbums.length + 1];System.arraycopy(photoAlbums, 0, newAlbums, 0, photoAlbums.length);newAlbums[newAlbums.length - 1] = "宠物";photoAlbums = newAlbums;System.out.println("新增后的相册数量:" + photoAlbums.length);}
}
4.2 代码解释
-
String[] photoAlbums = {"旅行", "美食", "自拍"};
:静态初始化一个包含三个相册名称的数组。 -
System.out.println(photoAlbums[0]);
:通过索引0
访问数组的第一个元素。 -
photoAlbums[1] = "美食2.0";
:通过索引1
修改数组的第二个元素。 -
photoAlbums[2] = null;
:通过索引2
将数组的第三个元素设为null
,模拟删除操作。 -
System.arraycopy(...)
:使用System
类的arraycopy
方法将原数组的元素复制到新数组中。 -
newAlbums[newAlbums.length - 1] = "宠物";
:在新数组的最后一个位置添加新的相册名称。
五、延展思考
🤔数组的局限与突破
5.1 当数组不够用时怎么办?
-
动态扩容 → 后续学ArrayList
-
分类管理 → 多维数组(二维相册墙)
5.2 多维数组与多层相册分类
在实际的手机相册中,可能会有多层分类,比如 “旅行” 相册下又分为 “国内旅行” 和 “国外旅行”。这时候,我们可以使用多维数组来实现。
String[][] multiLevelAlbums = {{"国内旅行", "国外旅行"},{"早餐", "午餐", "晚餐"},{"自拍", "合影"}
};
5.3 数组与其他数据结构的比较
数组虽然简单易用,但也有一些局限性,比如长度固定、插入和删除操作效率低等。在实际应用中,我们可能会根据具体需求选择其他数据结构,如ArrayList
、LinkedList
等。
总结
🧭 数组是我们的生存必备
数组的核心要点回顾
-
数组是固定大小的容器,存储相同类型的数据。
-
通过索引可以快速访问和修改元素。
-
数组的长度在创建后不可改变,增删元素需要创建新数组。
对进一步学习的建议
-
深入学习多维数组的使用。
-
了解其他数据结构的特点和应用场景。
-
通过实际项目练习,巩固数组和数据结构的知识。
相关文章:
用手机相册教我数组概念——照片分类术[特殊字符][特殊字符]
目录 前言一、现实场景1.1 手机相册的照片管理1.2 照片分类的需求 二、技术映射2.1 数组与照片分类的对应关系2.2 数组索引与照片标签的类比 三、知识点呈现3.1 数组的基本概念3.2 数组在编程中的重要性3.3 数组的定义与初始化3.4 数组的常见操作(增删改查ÿ…...

Node.js CSRF 保护指南:示例及启用方法
解释 CSRF 跨站请求伪造 (CSRF/XSRF) 是一种利用用户权限劫持会话的攻击。这种攻击策略允许攻击者通过诱骗用户以攻击者的名义提交恶意请求,从而绕过我们的安全措施。 CSRF 攻击之所以可能发生,是因为两个原因。首先,CSRF 攻击利用了用户无法辨别看似合法的 HTML 元素是否…...

【Linux】VSCode用法
描述 部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。 专栏目录:记录自己的嵌入式学习之路-CSDN博客 目录 1 安装环境及运行C/C 1.1 安装及配置步骤 1.2 运…...

来聊聊JVM中安全点的概念
文章目录 写在文章开头详解safepoint基本概念什么是安全点?为什么需要安全点JVM如何让线程跑到最近的安全点线程什么时候需要进入安全点JVM如何保证线程高效进入安全点如何设置安全点用一次GC解释基于安全点的STW实践-基于主线程休眠了解安全点的工作过程代码示例基于日志印证…...
【AI面试准备】负责所有Al产品的模型能力评估及测试,保障AI产品的质量
面试岗位提出这个要求:负责所有Al产品的模型能力评估及测试,保障AI产品的质量。 目录 **一、AI产品模型评估的核心框架**1. **评估维度全景图**2. **质量保障全流程****二、关键模型类型评估策略**1. **分类模型(如推荐系统)**2. **生成模型(如GPT、Stable Diffusion)**…...

Nginx — http、server、location模块下配置相同策略优先级问题
一、配置优先级简述 在 Nginx 中,http、server、location 模块下配置相同策略时是存在优先级的,一般遵循 “范围越小,优先级越高” 的原则,下面为你详细介绍: 1. 配置继承关系 http 块:作为全局配置块&…...
mysql数据库备份与恢复方法
一、备份方法 逻辑备份(基于SQL语句) 使用mysqldump工具 全库备份:mysqldump -u root -p --all-databases > all_databases_backup.sql单库备份:mysqldump -u root -p jztdb > full_backup.sql排除特定表:--igno…...
实验三 软件黑盒测试
实验三 软件黑盒测试使用测试界的一个古老例子---三角形问题来进行等价类划分。输入三个整数a、b和c分别作为三角形的三条边,通过程序判断由这三条边构成的三角形类型是等边三角形、等腰三角形、一般三角形或非三角形(不能构成一个三角形)。其中要求输入变量&#x…...

线性代数—向量与矩阵的范数(Norm)
参考链接: 范数(Norm)——定义、原理、分类、作用与应用 - 知乎 带你秒懂向量与矩阵的范数(Norm)_矩阵norm-CSDN博客 什么是范数(norm)?以及L1,L2范数的简单介绍_l1 norm-CSDN博客 范数(Norm…...
Umi-OCR项目(1)
最近接触到了一个项目,我在想能不能做出点东西出来。 目标:识别一张带表格的图片,要求非表格内容和表格内容都要识别得很好,并且可视化输出为word文档。 下面是第一步的测试代码,测试是否能够调用ocr能力。 import re…...

【业务领域】电脑主板芯片电路结构
前言 由前几期视频合集(零基础自学计算机故障排除—7天了解计算机开机过程),讲解了POST的主板软启动过程;有不少网友留言、私信来问各种不开机的故障,但大多网友没能能过我们的这合集视频,很好的理清思路,那这样的情况…...

pandas读取Excel数据(.xlsx和.xls)到treeview
对于.xls文件,xlrd可能更合适,但需要注意新版本的xlrd可能不支持xlsx,不过用户可能同时需要处理两种格式,所以可能需要结合openpyxl和xlrd?或者直接用pandas,因为它内部会处理这些依赖。 然后,…...
【Nginx】负载均衡配置详解
Nginx作为高性能的HTTP服务器和反向代理服务器,提供了强大的负载均衡功能。本文将详细介绍Nginx负载均衡的配置方法和相关策略。 一、基础负载均衡配置 1.单服务示例配置 配置nginx.conf模块 在Nginx配置文件中定义upstream模块: worker_processes a…...

JVM——垃圾收集策略
GC的基本问题 什么是GC? GC 是 garbage collection 的缩写,意思是垃圾回收——把内存(特别是堆内存)中不再使用的空间释放掉;清理不再使用的对象。 为什么要GC? 堆内存是各个线程共享的空间,…...

马克·雷伯特:用算法让机器人飞奔的人
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 马克雷伯特:用算法让机器人飞奔的人 一、天才的起点 在机器人领域,有一个名字如雷贯耳——马克雷伯特(Marc Raibert)。作为波士顿动力公司(Boston…...

信创系统资产清单采集脚本:主机名+IP+MAC 一键生成 CSV
原文链接:信创系统资产清单采集脚本:主机名IPMAC 一键生成 CSV Hello,大家好啊!今天给大家带来一篇在信创终端操作系统上自动批量采集主机名、IP 和 MAC 并导出为 CSV 表格的实战文章!本方案使用 sshpass 和 Bash 脚本…...

SpringBoot获取用户信息常见问题(密码屏蔽、驼峰命名和下划线命名的自动转换)
文章目录 一、不返回password字段二、返回的createTime和updateTime为空原因解决:开启驼峰命名和下划线命名的自动转换 设置返回的日期格式 一、不返回password字段 在字段上面添加JsonIgnore注解即可 JsonIgnore // 在把对象序列化成json字符串时,忽略…...
小刚说C语言刷题—1602总分和平均分
1.题目描述 期末考试成绩出来了,小明同学语文、数学、英语分别考了 x、y、z 分,请编程帮助小明计算一下,他的总分和平均分分别考了多少分? 输入 三个整数 x、y、z 分别代表小明三科考试的成绩。 输出 第 11行有一个整数&…...
C++编译之(5)-cmake/CMakeLists.txt的编译使用教程
C++编译之(5)-cmake/CMakeLists.txt的编译使用教程 上一节,点这里 1、如何查看cmake的配置参数 那么如何查看当前配置的参数呢,我们可以使用-L参数 cmake .. -L # cmake .. -LAH完全使用命令行,则可以通过多次重复使用cmake … -DOPTION1=ON -D OPTION2=ON配置制定选项;并…...

Mac下安装Python3,并配置环境变量设置为默认
下载Python 访问Python官方网站 https://www.python.org/ 首先获得python3安装路径 执行命令: which python3 以我这台电脑为例,路径为:/Library/Frameworks/Python.framework/Versions/3.9/bin/python3 编辑 bash_profile 文件 然后用 vim 打…...

Linux-04-用户管理命令
一、useradd添加新用户: 基本语法: useradd 用户名:添加新用户 useradd -g 组名 用户:添加新用户到某个组二、passwd设置用户密码: 基本语法: passwd 用户名:设置用户名密码 三、id查看用户是否存在: 基本语法: id 用户名 四、su切换用户: 基本语法: su 用户名称:切换用…...

【进阶】--函数栈帧的创建和销毁详解
目录 一.函数栈帧的概念 二.理解函数栈帧能让我们解决什么问题 三.相关寄存器和汇编指令知识点补充 四.函数栈帧的创建和销毁 4.1.调用堆栈 4.2.函数栈帧的创建 4.3 函数栈帧的销毁 一.函数栈帧的概念 --在C语言中,函数栈帧是指在函数调用过程中,…...
Hadoop伪分布式模式搭建全攻略:从环境配置到实战测试
引言 作为大数据生态的基石,Hadoop凭借其高可靠性、扩展性成为分布式计算的首选框架。本文将手把手带你完成Hadoop伪分布式模式部署,通过单节点模拟集群环境,为后续学习MapReduce、YARN等核心组件打下基础 目录 引言 Hadoop 发展历史 1.1 起源(2002–2005) 1.1 安装JDK…...
Transformer:颠覆深度学习的架构革命与技术演进
2017年,谷歌团队在论文《Attention Is All You Need》中提出的Transformer架构,彻底改变了人工智能对序列数据的处理范式。它不仅解决了传统循环神经网络(RNN)的长期依赖和并行化难题,更催生了BERT、GPT等划时代模型&a…...

【一】 基本概念与应用领域【数字图像处理】
考纲 文章目录 1 概念2005甄题【名词解释】2008、2012甄题【名词解释】可考题【简答题】可考题【简答题】 2 应用领域【了解】2.1 伽马射线成像【核医学影像】☆2.2 X射线成像2.3 紫外波段成像2.4 可见光和红外波段成像2.5 微波波段成像2.6 无线电波段成像2.7 电子显微镜成像2…...

NU1680低成本、无固件、高集成度无线充电电源接收器
无线充电 电子产品具有无线充电功能使用会更便利,介绍一款低成本、无固件、高集成度无线充电电源接收器NU1680 原理图和BOM可点绑定资源下载,LC部分电容建议X7R。 Load空载切满载测试 (CC Mode) – 尽量保证电子负载没有过冲 – 电子负载不要从0到满…...
JVM 内存分配策略
引言 在 Java 虚拟机(JVM)中,内存分配与垃圾回收是影响程序性能的核心机制。内存分配的高效性直接决定了对象创建的速率,而垃圾回收策略则决定了内存的利用率以及系统的稳定性。为了在复杂多变的应用场景中实现高效的内存管理&am…...

2025MathorCup数学应用挑战赛B题
目录 模型建立与求解 1.问题一的模型建立与求解 1.1 搬迁补偿模型设计 1.2 住户是否搬迁的应对策略与分析 1.3 定量讨论 2.问题二的模型建立与求解 2.1 搬迁方案模型的优化介绍 2.2 模型的评估 2.3 模型结果 3.问题三的模型建立与求解 3.1 拐点存在性分析模型的建立 3.2 模型的…...

组件的基本知识
组件 组件的基本知识 组件概念组成步骤好处全局注册生命周期scoped原理 父子通信步骤子传父 概念 就是将要复用的标签,抽离放在一个独立的vue文件中,以供主vue文件使用 组成 三部分构成 template:HTML 结构 script: JS 逻辑 style: CSS 样…...

Origin绘图操作:图中迷你图绘制
一、背景描述 Origin绘图时,局部数据变化较小,在整体图片中表现为局部曲线重叠在一起,图中y1和y2在x0-2时重叠在一起,需要将局部放大,绘制迷你图 二、实现方法 1.在左边工具栏选择放大镜,按住ctrl在图中…...