用手机相册教我数组概念——照片分类术[特殊字符][特殊字符]
目录
- 前言
- 一、现实场景
- 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 数组的常见操作(增删改查ÿ…...
字符串格式漏洞-[第五空间2019 决赛]PWN5
之前其实也写了一篇,现在再来看。又有新的收获了,于是记录一下 前置知识 格式化字符串漏洞详解-CSDN博客 讲得很清楚,我就不照猫画虎了 实践 main函数 首先先办法泄露我们输入的地址 from pwn import * elfpathlevel0 # ioprocess(elfp…...
数据结构学习之顺序表
在C语言学习到一定阶段之后,接下来我们就进入到了数据结构的部分内容。 目录 数据结构与线性表 顺序表 顺序表分类: 接下来我们要写一段代码实现动态顺序表。 首先我们需要准备三个文件: 1.接下来我们要定义一个数据表 2.当创建号我们的…...
AWS CloudFront全球加速利器:解析出海业务的核心优势与最佳实践
对于寻求全球化发展的企业而言,AWS CloudFront凭借其强大的全球基础设施和边缘计算能力,成为加速出海业务的关键工具。本文将深入剖析CloudFront的核心优势,并探讨其如何助力企业突破跨境业务瓶颈,同时符合SEO优化策略,…...
Flowable7.x学习笔记(十六)分页查询我的待办
前言 我的待办具体区分为3种情况,第一个就是办理人指定就是我,我可以直接审批;第二种就是我是候选人,我需要先拾取任务然后再办理;第三种是我是候选组,我需要切换到指定的角色去拾取任务再办理。如果任务已…...
Annotate better with CVAT
WIN10 配置标注环境 WSL + Docker Desktop 安装手册 https://docs.cvat.ai/docs/administration/basics/installation/ hebing@hello:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE cvat/ui …...
QML Image 组件详解
目录 引言相关阅读QML Image元素基础知识 项目结构示例解析1. 本地资源图像加载2. 网络图像加载3. 图像填充模式 应用主结构 总结下载链接 引言 本文将介绍QML中Image元素的基本用法和关键特性,包括加载本地资源图像、处理网络图像、以及调整图像的填充模式。通过一…...
BOFZ 緩衝區溢出shell脚本檢測工具
地址:https://github.com/MartinxMax/bofz BOFZ BOFZ 是一款簡單的緩衝區溢出掃描器,旨在檢測指定可執行文件中的緩衝區溢出漏洞。 此工具可用於快速測試應用程序或二進制文件中是否存在常見的安全缺陷,特別是那些由於對用戶輸入處理時邊界檢查不當而引…...
【Dify系列教程重置精品版】第五章:Dify配置Ollama
上一章我们在Dify上尝试配置了“月之暗面”。这一章我们在Dify上配置另一个模型“Ollama”。 什么是ollama呢?简单来说:它允许用户在个人计算机或服务器上快速部署和管理多种开源大语言模型,如 Llama3、Phi3、Gemma2 等,而无需依赖昂贵的云服务或专业的技术背景。 反正就是…...
RISC-V AIA SPEC学习(四)
第五章 Interrupts for Machine andSupervisor Levels 核心内容 1.主要中断类型与默认优先级: 定义了机器级别(M-level)和监管者级别(S-level)的标准中断类型(如MEI、SEI、MTI等)。默认优先级规则:本地中断(如软件/定时器)优先级高于外部中断,RAS事件(如低/高…...
Leetcode刷题报告2——双指针法
文章目录 前言[15. 三数之和](https://leetcode.cn/problems/3sum/)题干题解知识点总结 [42. 接雨水](https://leetcode.cn/problems/trapping-rain-water/)题干题解 前言 这部分总共是4道题,我就挑两道比较典型的题写一下博客吧。 双指针法的核心思路是通过合理的…...
线段树原理和代码详解
目录 线段树维护的信息类型 线段树的结构 线段树的初始化 线段树的功能: 单点修改,区间查询 区间修改,区间查询 以下内容均为个人见解,如有不足还请指出,作者会及时修改! 期待大家的点赞、收藏、评论&…...
xray-poc编写示例
禁止未授权扫描和测试行为!!! 1. SQL 时间盲注检测 (Time-Based Blind SQLi) name: generic/time-based-sqli rules:- method: GETpath: "/product?id1 AND (SELECT 1 FROM (SELECT SLEEP(5))a)--"expression: |response.status…...
[2-01-01].前端开发工具
前端学习大纲 一、VsCode: 1.1、下载地址 https://code.visualstudio.com/ 1.2.插件安装 为方便后续开发,建议安装如下插件 1.3.创建项目 先创建一个空的文件夹,如project_xxxx。然后打开vscode,再在vscode里面选择 File -> Open Fol…...
自动化实现web端Google SignUp——selenium
案例:自动化获取Google注册页面——selenium 前言 提示:通过案例掌握selenium语法 涉及技术:Python Selenium 在本文中,我们将通过一个实际案例来学习如何使用Selenium自动化工具模拟Google账号注册流程。这个案例涵盖了Selen…...
如何阅读GitHub上的深度学习项目
一、前期准备:构建知识基础 1. 必备工具与环境 开发工具: IDE:VS Code(推荐,轻量化插件丰富,如 Python、PyTorch 插件)、PyCharm(适合大型项目)。版本控制:…...
【LeetCode 热题 100】3.无重复字符的最长子串:详解滑动窗口解法
📌 原题链接:Longest Substring Without Repeating Characters 📖 一、题目描述 给定一个字符串 s,请你找出其中不含有重复字符的最长子串的长度。 示例: 输入: s "abcabcbb" 输出: 3 解释: 最长不重复子…...
Android12 Rom定制设置默认语言为中文
Android12 Rom定制设置默认语言为中文 1.前言: 最近在做客制化定制时需要默认语言为中文,而且可以切换输入法,之前讲解过在ROM中如何设置默认输入法,这里就不展开了,其实这个需求很简单,就是调试的时候发现…...
【设计模式】GoF设计模式之备忘录模式(Memento Pattern)
设计模式之备忘录模式 Memento Pattern V1.0核心概念角色代码示例程序运行结果代码讲解 适用场景 V1.0 核心概念 备忘录模式的核心是定义一个备忘录类(Memento),这个类的实例能够表示发起人类(Originator)的一种状态…...
springboot分层打包,减少重复构建和传输的开销
在 Spring Boot 中,分层打包(Layered Packaging) 是一种优化策略,特别针对 容器化部署(如 Docker) 的场景设计。它的核心思想是将应用的不同部分(依赖、资源、代码等)划分为独立的层…...
Linux——虚拟地址空间
1.虚拟地址空间 进程地址空间又叫虚拟地址空间 我们大家知道程序在运行时使用的空间被划分为多个不同的区域,每个区域都有不同的作用 正文代码:存放程序的可执行代码 通常都是只读的初始化数据:未初始化数据堆区:用于动态分配内存…...
GPU虚拟化实现(七)
GPU虚拟化实现(七) 章节回顾进程管理资源限制和环境变量利用率监控线程信号处理退出处理代码具体运作流程怎么限制SM的总结章节回顾 在上一章,分析了项目的主要代码模块功能:共享内存和初始化、GPU 内存管理、GPU 利用率管理以及锁机制,在这一章将继续分析其他的代码模块…...
【QNX+Android虚拟化方案】137 - msm-5.4 Kernel U盘 插入中断、枚举、匹配完整流程详解
【QNX+Android虚拟化方案】137 - msm-5.4 Kernel U盘 插入中断、枚举、匹配完整流程详解 1. HUB提交中断URB给HCD控制器,URB完成回调函数为 hub_irq()2. U盘插入后,触发运行 hub_irq() 中断回调函数2.1 高通 DWC3 Host HCD 初始化流程2.2 urb->complete(urb) 中断回调流程…...
分布式锁的几种实现
前几天看一个面试视频,提到了分布式锁一直想写写,但奈何考试太多,直到今天才有时间。好啦,开始今天的文章吧。 一.定义 分布式锁:当多个进程不在同一个系统中(比如分布式系统中控制共享资源访问),用分布式…...
Android 解绑服务问题:java.lang.IllegalArgumentException: Service not registered
问题与处理策略 问题描述 在 Android 项目中,解绑(unbindService())一个服务(Service)时,报如下错误 java.lang.IllegalArgumentException: Service not registered问题原因 错误表明在解绑服务时&…...
注册登录页面项目
关系型数据库地址:C:\Users\ASUS\AppData\Local\Temp\HuaweiDevEcoStudioDatabases\rdb #注册页面register.ets import dataRdb from ohos.data.rdbconst STORE_CONFIG {name: weather4.db } const TABLE_NAME weather_info const SQL_CREATE_TABLE CREATE TAB…...
从 Python 基础到 Django 实战 —— 数据类型驱动的 Web 开发之旅
主题简介: 本主题以 Python 基础数据类型为核心,结合 Django 框架的开发流程,系统讲解如何通过掌握数字、字符串、列表、元组、字典等基础类型,快速构建功能完善的 Web 应用。通过理论与实践结合,帮助学员从零基础 Py…...
数字智慧方案5971丨智慧农业大数据平台解决方案(59页PPT)(文末有下载方式)
详细资料请看本解读文章的最后内容。 资料解读:智慧农业大数据平台解决方案 在现代农业发展进程中,智慧农业大数据平台解决方案正成为推动农业变革的关键力量。这一方案从项目简介到大数据展示,各个环节紧密相连,致力于为农业发展…...
MOOS-ivp使用(一)——水下机器人系统的入门与使用
MOOS-ivp使用(一)——水下机器人系统的入门与使用 MOOS-ivp(Marine Operational Oceanographic System for Intelligent Vehicle Planning)是专为水下机器人(如AUV)设计的开源框架。类似于ROS,…...
【网络服务器】——回声服务器(echo)
作用 实现回声服务器的客户端/服务器程序,客户端通过网络连接到服务器,并发送任意一串英文信息,服务器端接收信息后,执行数据处理函数:将每个字符转换为大写并回送给客户端显示。 客户端:发送字符信息 服…...
IDEA在项目中添加模块出现Error adding module to project: null(向项目添加模块时出错: null)的解决方法
解决方法 (1)打开当前项目的结构...
(34)VTK C++开发示例 ---将图片映射到平面
文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 演示如何将图片作为纹理贴图到一个平面上。 这段代码的功能是使用 VTK(Visualization Toolkit࿰…...
微软与Meta大幅增加人工智能基础设施投入
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
华为云服务器VoceChat在线聊天室部署
目录 1. 项目介绍2. 准备条件3. Docker环境部署3.1 安装Docker(CentOS 7)3.2 安装Docker Compose3.3 Docker常用命令 4. 创建配置文件4.1 创建工作目录4.2 创建docker-compose.yml文件4.3 保存配置文件 5. 部署运行5.1 启动服务5.2 检查服务状态5.3 防火…...
ERP系统(技术面)知识积累
本文为本人在准备某公司信息技术类岗位的面试时所作的笔记,该公司有技术面,此岗位入职后负责的是ERP系统的运行和维护,所以可能会问ERP系统相关的问题。故我写此文以做准备。 ERP简介 ERP,全称Enterprise Resource Planning&…...
Python学习笔记(第三部分)
接续 Python.md 文件的第三部分 类 类的创建的基本使用 创建一个类 class Dog(): 文档字符串:这是一次模拟小狗的简单尝试 def __init__(self,name,age):self.name nameself.age agedef sit(self):print(self.name.title() " is now sitting.")def ro…...
【浅尝Java】Java简介第一个Java程序(含JDK、JRE与JVM关系、javcdoc的使用)
🍞自我激励:每天努力一点点,技术变化看得见 文章目录 Java语言概述Java是什么Java语言的重要性Java语言发展简史Java语言特性 第一个Java程序main方法示例运行Java程序JDK、JRE、JVM之间的关系注释基本规则注释规范 标识符关键字 Java语言概述…...
【FreeRTOS-列表和列表项】
参照正点原子以及以下gitee笔记整理本博客,并将实验结果附在文末。 https://gitee.com/xrbin/FreeRTOS_learning/tree/master 一、列表和列表项的简介(熟悉) 1、什么是列表 答:列表是FreeRTOS中的一个数据结构,概念上和链表有点类似&#…...
22.2Linux的I2C驱动实验(编程)_csdn
我尽量讲的更详细,为了关注我的粉丝!!! 这里我们用到的是stm32mp157的板子,所以我们看一下I2C用到的引脚。 1、硬件原理图分析 可以看到在这块板子上面用的SDA和SCL总线是PA11,PA12。所以要修改设备树和镜像文件&…...
socket-IO复用技术
五个I/O模型 1、阻塞I/O 2、非阻塞I/O 3、I/O复用(select和poll) 4、信号驱动I/O 5、异步I/O I/O复用 是一种在单线程或单进程环境下,同时监听多个 I/O 事件的技术。它允许程序高效地处理多个输入输出流(如网络套接字、文件描…...
上位机知识篇---二进制操作
文章目录 前言接收数据示例:0xAA 0x12 0x34 0x55合并高/低字节数据RGB565颜色值:0xF800(红色)Python中负数右移接收帧:01 03 02 12 34 CRC前言 本文简单对单片机、上位机中的映射(Mapping)和位移操作符(Bit Shifting)等相关知识进行了简单介绍. 一、单片机与上位机中…...
openEuler 22.03 安装 Mysql 5.7,TAR离线安装
目录 一、检查系统是否安装其他版本Mariadb数据库二、环境检查2.1 必要环境检查2.2 在线安装(有网络)2.3 离线安装(无网络) 二、下载Mysql2.1 在线下载2.2 离线下载 三、安装Mysql四、配置Mysql五、开放防火墙端口六、数据备份七、…...
《排序算法总结》
引言: 编程学到现在,我们已经接触了很多种排序算法,这篇文章我就对常见的几种排序算法进行一个小结。 一: 排序算法分类: 二: 插入排序: 直接插入排序: 1. 概念: 直…...
【Java学习笔记】递归
递归(recursion) 思想:把一个复杂的问题拆分成一个简单问题和子问题,子问题又是更小规模的复杂问题,循环往复 本质:栈的使用 递归的注意事项 (1)需要有递归出口,否者就…...
体系学习1:C语言与指针1——预定义、进制打印、传参为数组
1、不对一段代码进行编译 #if 0 statement #endif2、输出地址 int d[3]{1,2,3}; printf("%p",(void*)d);//p期待的是void*类型的数据3、不同进制的打印 int data 1200; char hed[9];//为\0预留位置!!! sprintf(hed,"%08X&…...
使用Java正则表达式进行分组与匹配文本提取
在Java开发中,正则表达式(Regex)是处理字符串的强大工具,广泛应用于数据验证、文本解析和格式转换等场景。通过正则表达式的分组功能,开发者可以精确地提取匹配模式的子部分,而不仅仅是整个匹配内容。Java的…...
RAGFlow上传3M是excel表格到知识库,提示上传的文件总大小过大
环境: Ragflowv0.17.2 问题描述: RAGFlow上传3M是excel表格到知识库,提示上传的文件总大小过大 解决方案: 定位问题: 1.查询Nginx 日志 Nginx 日志 检查 Nginx 配置中日志路径是否正确,确保日志文件有…...
2025年4月文章一览
2025年4月编程人总共更新了30篇文章: 1.2025年3月文章一览 2.《Operating System Concepts》阅读笔记:p528-p544 3.《Operating System Concepts》阅读笔记:p545-p551 4.《Operating System Concepts》阅读笔记:p552-p579 5.…...
2025大模型微调视频课程全套(附下载)
2025大模型微调视频课程全套,共10课。主要内容如下: 1、大模型的发展 2、Transformer & LLMs 3、大模型微调预览&Lora微调&Alpaca模型微调 4、Alpaca&AdaLoRA&QLoRA模型微调 5、Efficient Fine-tuning&Efficient Inference&…...
【Python Web开发】04-Cookie和Session
文章目录 1. Cookie1.1 定义1.2 工作原理1.3 用途1.4 优缺点 2. Session2.1 定义2.2 工作原理2.3 用途2.4 优缺点 3. Cookie 与 Session 的关系4. 安全性考量5. Python 中使用 Cookie 和 Session 在 HTTP 协议里,Cookie 和 Session 是用于管理客户端与服务器之间会话…...