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

数据结构*集合框架顺序表-ArrayList

集合框架

常见的集合框架
在这里插入图片描述
在这里插入图片描述

什么是顺序表

顺序表是一种线性表数据结构,它借助一组连续的存储单元来依次存储线性表中的数据元素。一般情况下采用数组存储。 在数组上完成数据的增删查改。

自定义简易版的顺序表

代码展示:

public interface IArrayList {//新增元素,默认在数组最后新增void add(int data);//在 pos 位置新增元素void add(int pos, int data);//判定是否包含某个元素boolean contains(int toFind);//查找某个元素对应的位置int indexOf(int toFind);//获取 pos 位置的元素int get(int pos);//给 pos 位置的元素设为 valuevoid set(int pos, int value);//删除第⼀次出现的关键字keyvoid remove(int toRemove);//获取顺序表⻓度int size();//清空顺序表void clear();
}
import java.util.Arrays;public class MyArrayList implements IArrayList {private int useSize;private int[] elem;public MyArrayList() {this.elem = new int[Constant.DEFAULT_CAPACITY];}@Override//新增元素,默认在数组最后新增public void add(int data) {//1、是否能继续存放数据,不能就进行扩容if(isFill()) {grow();}//2、在数组末尾添加数据this.elem[useSize] = data;this.useSize++;}@Override//在 pos 位置新增元素public void add(int pos, int data) {//1、是不是满的if(isFill()) {grow();}//2、检查pos位置的合法性checkPosAdd(pos);//3、移动数据for (int i = useSize - 1; i >= pos ; i--) {elem[i+1] = elem[i];}/*if (useSize - pos >= 0) {System.arraycopy(elem, pos, elem, pos + 1, useSize - pos);}*/elem[pos] = data;useSize++;}private void checkPosAdd(int pos) {if(pos < 0 || pos > this.useSize) {throw new PosException(Constant.ADD_CHECK_MASSAGE);}}@Override//判定是否包含某个元素public boolean contains(int toFind) {for (int i = 0; i < this.useSize; i++) {if(elem[i] == toFind) {return true;}}return false;}@Override//查找某个元素对应的位置public int indexOf(int toFind) {for (int i = 0; i < this.useSize; i++) {if(elem[i] == toFind) {return i;}}return 0;}@Override//获取 pos 位置的元素public int get(int pos) {//1、判断顺序表是否为空if(isEmpty()) {throw new isEmptyException(Constant.EMPTY_MASSAGE);}//2、判断pos位置是否合法checkPos(pos);return elem[pos];}private void checkPos(int pos) {if(pos < 0 || pos >= this.useSize) {throw new PosException(Constant.GET_CHECK_MASSAGE);}}@Override//给 pos 位置的元素设为 valuepublic void set(int pos, int value) {if(isEmpty()) {throw new isEmptyException(Constant.EMPTY_MASSAGE);}checkPos(pos);elem[pos] = value;}@Override//删除第⼀次出现的关键字keypublic void remove(int toRemove) {if(isEmpty()) {throw new isEmptyException(Constant.EMPTY_MASSAGE);}int index = indexOf(toRemove);if(index == -1) {System.out.println("没有你要删除的数据");return;}for (int i = index; i < this.useSize - 1; i++) {elem[i] = elem[i+1];}elem[useSize - 1] = 0;useSize--;}@Override//获取顺序表⻓度public int size() {return this.useSize;}@Override//清空顺序表public void clear() {for (int i = 0; i < this.useSize; i++) {this.elem[i] = 0;}this.useSize = 0;}//是否为空private boolean isEmpty() {return useSize == 0;}//是否存满private boolean isFill() {return this.useSize == this.elem.length;//判断有效数据是否等于总数组长度}//数据扩容private void grow() {this.elem = Arrays.copyOf(this.elem,elem.length*2);}@Overridepublic String toString() {return Arrays.toString(elem);}
}
public class PosException extends RuntimeException{public PosException() {super();}public PosException(String message) {super(message);}
}
public class isEmptyException extends RuntimeException{public isEmptyException() {super();}public isEmptyException(String message) {super(message);}
}
public class Constant {public static final int DEFAULT_CAPACITY = 5;public static final String EMPTY_MASSAGE = "顺序表为空";public static final String GET_CHECK_MASSAGE = "get方法的pos位置不合法";public static String ADD_CHECK_MASSAGE = "add方法的pos位置不合法";
}
public class Test {public static void main(String[] args) {MyArrayList myArrayList = new MyArrayList();myArrayList.add(1);myArrayList.add(2);myArrayList.add(3);myArrayList.add(4);myArrayList.add(2,10);myArrayList.add(2,10);System.out.println(myArrayList.contains(9));System.out.println(myArrayList.get(0));myArrayList.set(1,20);myArrayList.remove(10);System.out.println(myArrayList.size());System.out.println(myArrayList);myArrayList.clear();System.out.println(myArrayList);}
}

代码解释:

1、定义了一个IArrayList接口,里面有需要实现的方法。
2、Constant类用来存放一些常量。
3、自定义了一个MyArrayList顺序表。useSize表示数据中的有效长度,elem[]表示存储数据的数组。在构造方法中初始化了数组的默认大小。实现了如下方法:

方法功能
void add(int data)新增元素,默认在数组最后面新增
void add(int pos,int data)在pos位置新增元素
boolean contains(int toFind)判断是否包含某个元素
int indexOf(int toFind)查找某个元素对应的位置
int get(int pos)获得pos位置的元素
void set(int pos,int value)给pos位置的元素设为value
void remove(int toRemove)删除第一次出现的关键字toRemove
int size()获得顺序表长度
void clear()清空顺序表
4、两个自定义异常,分别表示数组中没有元素、pos位置不合法。
5、对于数据结构来说是很严谨的,需要考虑各种情况。将可能发生的情况进行书写。

官方定义的顺序表-ArrayList

类的属性

在这里插入图片描述

构造方法

有三种构造方法

无参构造方法

在这里插入图片描述

public static void test1() {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add("Hello");//报错System.out.println(arrayList);List<String> list = new ArrayList<>();//向上转型list.add("Hello");list.add("World");System.out.println(list);
}

此时new的是一个空的列表。arrayList已经限定为Integer类型,不能接收String类型。
对于add方法,查看源码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
grow方法就是扩容操作,完成的是1.5倍扩容。

指定顺序表初始容量

在这里插入图片描述

public static void test2() {ArrayList<Integer> arrayList = new ArrayList<>(20);arrayList.add(10);arrayList.add(20);arrayList.add(30);System.out.println(arrayList);
}

利用其他Collection构建ArrayList

在这里插入图片描述

public static void test3() {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(1);System.out.println(arrayList);ArrayList<Integer> arrayList1 = new ArrayList<>(arrayList);arrayList1.add(10);System.out.println(arrayList1);ArrayList<Number> arrayList2 = new ArrayList<>(arrayList);arrayList2.add(100);System.out.println(arrayList2);System.out.println(arrayList1);ArrayList<String> stringArrayList = new ArrayList<>(arrayList);//报错
}

输出:
[1]
[1, 10]
[1, 100]
[1, 10]

说明这种构造方法是创建一个新(单独)的列表,并继承传入的列表已有的值。

ArrayList常见操作

方法功能
boolean add(E e)尾插e
void add(int index,E element)将e插入到index位置
boolean addAll(Collection<? extends E> c)尾插c中的元素
E remove(int index)删除index位置元素
boolean remove(Object o)删除遇到的第一个o
E get(int index)获取下标index位置元素
E set(int index,E element)将下标index位置元素设置为element(替换)
void clear()清空
boolean contains(Object o)判断o是否在线性表中
int indexOf(Object o)返回第一个o所在下标
int lastindexOf(Object o)返回最后一个o所在下标
List<E> subList(int fromIndex,int toIndex)截取部分list

代码案例:

import java.util.ArrayList;
import java.util.List;public class Test {public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);arrayList.add(4,10);System.out.println(arrayList);//arrayList.add(6,10);//报错,IndexOutOfBoundsExceptionArrayList<Integer> arrayList1 = new ArrayList<>();arrayList1.addAll(arrayList);System.out.println(arrayList1);arrayList1.add(5);System.out.println(arrayList);System.out.println("===========");arrayList.remove(4);System.out.println(arrayList);System.out.println("===========");Integer i = 4;arrayList.remove(i);System.out.println(arrayList);System.out.println("===========");System.out.println(arrayList.get(2));System.out.println("===========");arrayList.set(1,100);System.out.println(arrayList);System.out.println("===========");System.out.println(arrayList.contains(10));System.out.println("===========");ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);list.add(8);list.add(9);list.add(10);System.out.println(list);//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]List<Integer> sublist = list.subList(2, 7);System.out.println(sublist);//[3, 4, 5, 6, 7]sublist.set(0,100);System.out.println(sublist);//[100, 4, 5, 6, 7]System.out.println(list);//[1, 2, 100, 4, 5, 6, 7, 8, 9, 10]}
}

代码解释:

需要注意的是:
1、subList()方法截取的范围是 [ fromeIndex,toIndex )
2、这里的截取并不是创建一个新的顺序表,而是获取原表上fromeIndex的地址。所以修改的是原表上的值。

ArrayList的遍历

代码案例:

public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);System.out.println("--------for循环遍历--------");for(int i = 0; i < list.size();i++) {System.out.print(list.get(i)+" ");}System.out.println();System.out.println("--------foreach循环遍历--------");for (Integer integer : list) {System.out.print(integer + " ");}System.out.println();System.out.println("--------迭代器正序输出1--------");Iterator<Integer> it = list.listIterator();while (it.hasNext()) {System.out.print(it.next()+" ");}System.out.println();System.out.println("--------迭代器正序输出2--------");ListIterator<Integer> its = list.listIterator();while (its.hasNext()) {System.out.print(its.next()+" ");}System.out.println();System.out.println("--------迭代器正序输出3(从指定下标位置输出)--------");ListIterator<Integer> itss = list.listIterator(2);while (itss.hasNext()) {System.out.print(itss.next()+" ");}System.out.println();System.out.println("--------迭代器逆序输出--------");ListIterator<Integer> reits = list.listIterator(list.size());while (reits.hasPrevious()) {System.out.print(reits.previous()+" ");}
}

输出:
--------for循环遍历--------
1 2 3 4 5 6 7
--------foreach循环遍历--------
1 2 3 4 5 6 7
--------迭代器正序输出1--------
1 2 3 4 5 6 7
--------迭代器正序输出2--------
1 2 3 4 5 6 7
--------迭代器正序输出3从指定下标位置输出--------
3 4 5 6 7
--------迭代器逆序输出--------
7 6 5 4 3 2 1

代码解释:

1、list.listIterator() 是调用 list 对象的方法来获取一个列表迭代器。it.hasNext() 是判断迭代器 it 是否还有下一个元素。it.next() 方法会返回迭代器指向的下一个元素(即列表中的下一个 Integer 元素)。
2、实现了Iterator接口就能使用迭代器进行打印。
3、ListIterator接口继承了Iterator接口,也就是说有更多的方法。

嵌套列表

代码案例

1、

public static void test() {List<List<Integer>> list = new ArrayList<>();List<Integer> list0 = new ArrayList<>();list0.add(10);list0.add(100);list0.add(1000);List<Integer> list1 = new ArrayList<>();list1.add(20);list1.add(200);List<Integer> list2 = new ArrayList<>();list2.add(30);list2.add(300);List<Integer> list3 = new ArrayList<>();list3.add(40);list3.add(400);list3.add(4000);List<Integer> list4 = new ArrayList<>();list4.add(50);list4.add(500);list.add(list0);list.add(list1);list.add(list2);list.add(list3);list.add(list4);for(int i = 0; i < list.size();i++) {for (int j = 0; j < list.get(i).size(); j++) {System.out.print(list.get(i).get(j)+" ");}System.out.println();}System.out.println();
}

输出:
10 100 1000
20 200
30 300
40 400 4000
50 500

关系大致如图所示:
在这里插入图片描述
2、

public static List<List<Integer>> generate(int numRows) {List<List<Integer>> ret = new ArrayList<>();//定义起始行List<Integer> list0 = new ArrayList<>();list0.add(1);ret.add(list0);//定义后面的行for (int i = 1; i < numRows; i++) {//定义每行列表List<Integer> currentRow = new ArrayList<>();//第一个元素都是1currentRow.add(1);//中间操作List<Integer> preRow = ret.get(i - 1);for (int j = 1; j < i; j++) {//按照规律添加元素currentRow.add(preRow.get(j) + preRow.get(j-1));}//每行最后一个元素都是1currentRow.add(1);//currentRow行存储到ret中ret.add(currentRow);}return ret;
}public static void main(String[] args) {List<List<Integer>> list = generate(5);for (List<Integer> integers : list) {for (Integer integer : integers) {System.out.print(integer + " ");}System.out.println();}System.out.println();
}

关系大致如图所示:
在这里插入图片描述

代码解释:

1、本质上是一个二维列表,可用于存储和操作二维数据结构。
2、代码二,实现的是杨辉三角的输出。

相关文章:

数据结构*集合框架顺序表-ArrayList

集合框架 常见的集合框架 什么是顺序表 顺序表是一种线性表数据结构&#xff0c;它借助一组连续的存储单元来依次存储线性表中的数据元素。一般情况下采用数组存储。 在数组上完成数据的增删查改。 自定义简易版的顺序表 代码展示&#xff1a; public interface IArray…...

(二)Graspnet在mujoco的仿真复现(操作记录)

目录 《复现的项目来源》 一、创建虚拟环境 二、下载manipulator_grasp项目 三、配置环境 1、基于graspnet-baseline项目进行开发 &#xff08;1&#xff09;下载 graspnet-baseline项目 &#xff08;2&#xff09;修改graspnet-baseline的requirements.txt&#xff0c;…...

黑马商城项目(一)MybatisPlus

一、快速入门 入门案例&#xff1a; 常见注解&#xff1a; 常见配置&#xff1a; 条件构造器(wrapper)&#xff1a; 案例&#xff1a; Testvoid testUpdateByWrapper(){List<Long> ids List.of(1L,2L,3L);UpdateWrapper<User> userUpdateWrapper new UpdateWrapp…...

Linux系统编程 day2

系统调用 由操作系统实现并提供给外部应用程序的编程接口(API)。是应用程序同系统之间数据交换的桥梁。 文件IO 函数 open/close函数 头文件 #include<fcntl.h> #include<unistd.h>int open(const char*pathname , int flags) int open(const char*pathname , …...

告别繁琐,拥抱简洁:初识 Pytest 与环境搭建 (Pytest系列之一)

在 Python 自动化测试领域&#xff0c;Pytest以其简洁、灵活和强大的特性&#xff0c;越来越受到广大测试工程师和开发者的青睐。如果你还在为繁琐的测试框架而苦恼&#xff0c;或者希望提升你的 Python 测试效率&#xff0c;那么 Pytest 绝对值得你深入了解和使用。 本文将带…...

浏览器运行Pytorch无法启用显卡

注意 我启用高性能之后&#xff0c;结果蓝屏了。无语Thinkpad T14p&#xff01;&#xff01;&#xff01; 仅供参考。 问题与方案 在浏览器里面用Jupyter编写python程序&#xff0c;进行网络模型训练。 里面导入了PyTorch&#xff0c;但是并没有启用显卡执行&#xff1a; 也…...

天元证券|8家汽车零部件上市公司一季度业绩预喜

近日&#xff0c;中国汽车工业协会发布的数据显示&#xff0c;今年一季度&#xff0c;我国汽车产量为756.1万辆&#xff0c;同比增长14.5%&#xff1b;汽车销量为747万辆&#xff0c;同比增长11.2%。 受益于前三个月汽车产、销量同比双增&#xff0c;上游产业链公司交出了一份可…...

C语言学习之sizeof函数和strlen函数

经过我们之前的学习&#xff0c;已经接触过很多次sizeof函数和strlen函数了&#xff0c;应用他们来求解数组大小等等。但是实际应用中两者的差别还是很大的&#xff0c;接下来我们就来了解一下吧。 sizeof函数 sizeof函数计算的是变量所占内存空间的大小的&#xff0c;单位是字…...

从 “经验养生” 到 “数据养生”:智慧养老如何终结 “伪科学”?

在养老养生领域&#xff0c;长期以来 “经验养生” 占据主导地位&#xff0c;各种未经科学验证的说法和做法流传甚广&#xff0c;其中不乏 “伪科学” 内容&#xff0c;给老年人的健康和生活带来诸多误导。 随着智慧养老的兴起&#xff0c;“数据养生” 模式逐渐崭露头角&…...

什么是跨域问题以及其解决方案

一、什么是跨域&#xff1f; 1.1. 什么是同源策略&#xff1f;1.2. 同源策略限制以下几种行为 二、常见的跨域场景三、9种跨域解决方案 1. JSONP跨域 1.1. 原生JS实现1.2. jquery Ajax实现1.3. Vue axios实现 2. CORS 跨域资源共享 &#xff08;前端不需要做任何改变&#xff0…...

Go之Slice和数组:深入理解底层设计与最佳实践

在Go语言中&#xff0c;数组&#xff08;Array&#xff09;和切片&#xff08;Slice&#xff09;是两种看似相似却本质不同的数据结构。本文将深入剖析它们的底层实现机制&#xff0c;并结合实际代码示例&#xff0c;帮助开发者掌握核心差异和使用场景。 一、基础概念&#xff…...

快速部署大模型 Openwebui + Ollama + deepSeek-R1模型

背景 本文主要快速部署一个带有web可交互界面的大模型的应用&#xff0c;主要用于开发测试节点&#xff0c;其中涉及到的三个组件为 open-webui Ollama deepSeek开放平台 首先 Ollama 是一个开源的本地化大模型部署工具,提供与OpenAI兼容的Api接口&#xff0c;可以快速的运…...

RF connect SDK 修改蓝牙address的方法

目录 概述 1 静态设置蓝牙地址&#xff08;编译时配置&#xff09; 1.1 通过 prj.conf 文件设置 1.2 通过 overlay 文件设置 2 动态修改蓝牙地址&#xff08;运行时修改&#xff09; 2.1 使用 bt_addr_le_t 结构 2.2 使用 bt_set_id_addr&#xff08;适用于 Public Add…...

MuJoCo(Multi-Joint Dynamics with Contact)机器人仿真器存在的问题

MuJoCo物理引擎计算接触力的核心思路&#xff0c;是通过数学优化的方式同时满足多个物理约束&#xff0c;而不是简单地为每个碰撞点单独计算作用力。它的工作流程可以理解为几个阶段的紧密配合。首先&#xff0c;仿真器会快速检测所有可能发生接触的物体表面&#xff0c;筛选出…...

IDEA远程Debug调试

最近开发一个功能&#xff0c;因为环境问题&#xff0c;本地无法正常将多个微服务都启动成功。 另外接手了一个新活&#xff0c; 逻辑比较复杂&#xff0c;需要去研究一下测试一下原来的功能逻辑。方便找到新任务功能点的切入点。这才了解到Idea远程debug调试的功能。 本文章…...

爱普生有源晶振SG2016VHN在网络服务器中的应用

在数字化浪潮席卷全球的当下&#xff0c;网络服务器作为数据存储、处理与传输的核心枢纽&#xff0c;其性能的稳定与高效直接关系到整个网络生态的正常运转。从企业内部的数据管理&#xff0c;到互联网服务提供商的大规模数据运算&#xff0c;网络服务器需要应对海量数据的高速…...

【差分隐私相关概念】瑞丽差分隐私(RDP)命题2

分步解析与答案 1. c-稳定变换的定义 c-稳定变换是一种将群体数据集&#xff08;如数据库集合&#xff09;的相邻性映射到个体数据集&#xff08;如单条记录变化&#xff09;的变换。具体来说&#xff0c;若变换 g : D ′ → D g: \mathcal{D} \to \mathcal{D} g:D′→D 是 …...

大前端基础学习

一、cs架构和bs架构 c&#xff1a;客户端&#xff0c; b&#xff1a;浏览器&#xff08;无需安装&#xff0c;无需更新&#xff0c;可跨平台&#xff09;√ s&#xff1a;server服务端&#xff0c;帮我们保 存信息&#xff0c;传递信息 二、 altshift向下键向下复制一行 …...

Spring Batch 专题系列(四):配置与调度 Spring Batch 作业

1. 引言 在上一篇文章中,我们详细探讨了 Spring Batch 的核心组件(Job、Step、Chunk、ItemReader、ItemProcessor、ItemWriter),并通过示例展示了它们的协作方式。掌握了这些组件后,接下来需要了解如何灵活配置 Spring Batch 作业,并通过调度机制控制作业的执行时机。本…...

Android 项目配置文件解释

Android 项目配置文件解释 目录 Android 项目配置文件解释1. `plugins` 块2. `android` 块3. `dependencies` 块为什么需要 JDK 和 Kotlin1. plugins 块 plugins {id com.android.applicationid org.jetbrains.kotlin.android }id com.android.application:应用 Android 应用…...

uniapp 自定义tabbar

v3 写法 <template><view class"" v-if"Data.imgurl"><view class"tabbars" ref"tabbars" id"tabbars"><view class"flex jsa"><view class"tabbarc_li" click"go(/p…...

C++高级2 智能指针

智能指针介绍 裸指针 int * p new int(10); *p 30; delete p; 必须要手动释放 智能指针 保证能做到资源的自动释放&#xff0c;利用栈上的对象出作用域自动析构的特征&#xff0c;来做到资源的自动释放的 实现一个简单的智能指针 class Cptr { public:Cptr(T* ptr …...

【FPGA】——DDS信号发生器设计

目录 一 、IP核的使用 &#xff08;1)RAM IP核 (2)FIFO IP核 二、DDS信号发生器设计 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;仿真波形 一 、IP核的使用 IP核&#xff1a;ASIC或FPGA中预先设计好具有某种功能的电路模块&#xff0c;参数可修改&#xf…...

mysql按条件三表并联查询

下面为你呈现一个 MySQL 按条件三表并联查询的示例。假定有三个表&#xff1a;students、courses 和 enrollments&#xff0c;它们的结构和关联如下&#xff1a; students 表&#xff1a;包含学生的基本信息&#xff0c;有 student_id 和 student_name 等字段。courses 表&…...

centos 7 docker创建的postgres数据库状态检查

一 、打开finalshell 连接主机 二、检查docker状态,以下信息表示数据库准备好连接了 注意:当finalshell可以访问主机,但没有准备信息时,重启centos系统试试 docker logs postgres 三、如果是传统安装 基于 systemd 的系统(如 CentOS 7 及以上、Ubuntu 16.04 及以…...

基于EasyX库开发的球球大作战游戏

目录 球球大作战 一、开发环境 二、流程图预览 三、代码逻辑 1、初始化时间 2、设置开始界面大小 3、设置开始界面 4、让玩家选择速度 5、设置玩家小球、人机小球、食物的属性 6、一次性把图绘制到界面里 7、进入死循环 8、移动玩家小球 9、移动人机 10、食物刷新…...

ES和MySQL概念对比

基本概念 ES和MySQL都属于数据库&#xff0c;不过各有各的特性&#xff0c;大致使用方法与MySQL类似并无区别。 MySQL&#xff1a;擅长事务持有ACID的特性&#xff0c;确保数据的一致性和安全。 ES&#xff1a;持有倒排索引&#xff0c;适合海量数据搜索和分析。 ES和MySQL如何…...

Kotlin 与 Jetpack Compose 参数设计完全指南

作为 Kotlin 和 Jetpack Compose 开发者&#xff0c;合理的参数设计能显著提升代码的可读性和易用性。本文将系统整理各类参数规则&#xff0c;帮助您编写更优雅的 API。 一、基础参数规则 1. 方法参数 // 基础定义 fun 方法名(必需参数: 类型, 可选参数: 类型 默认值): 返…...

dea如何使用git

在 IntelliJ IDEA 中使用 Git 的详细步骤如下&#xff0c;分为配置、基础操作和高级功能&#xff0c;适合新手快速上手&#xff1a; ​一、配置 Git​ ​安装 Git​ 下载并安装 Git&#xff0c;安装时勾选“Add to PATH”。验证安装&#xff1a;终端输入 git --version 显示版本…...

git -- 版本控制介绍(分布式系统),git介绍(对待数据的方式,本地执行,保证完整性,只添加数据,git文件/项目的三种状态,基本的工作流程)

目录 版本控制 介绍 分布式版本控制系统 git 介绍 与多个远程仓库协作 对待数据的方式 本地执行操作 保证完整性 只添加数据 三种状态 工作区 暂存区 Git 目录 基本的git工作流程 版本控制 介绍 一种记录一个或多个文件内容变化的系统&#xff0c;它可以让你在未来…...

嵌入式软件OTA升级,有哪几种Flash划分方式?

第一次接触嵌入式软件OTA升级的时候&#xff0c;我整个人也是懵的。Flash划分&#xff1f;什么鬼&#xff1f;不是直接把新程序烧进去就完事了吗&#xff1f; 结果一上手才发现&#xff0c;这玩意没那么简单&#xff0c;尤其是Flash怎么分&#xff0c;如果Flash划分没弄好&…...

游戏引擎学习第226天

引言&#xff0c;计划 我们目前的目标是开始构建“元游戏”结构。所谓元游戏&#xff0c;指的是不直接属于核心玩法本身&#xff0c;但又是游戏体验不可或缺的一部分&#xff0c;比如主菜单、标题画面、存档选择、选项设置、过场动画等。我们正在慢慢将这些系统结构搭建起来。…...

通过python实现bilibili缓存视频转为mp4格式

需要提前下好ffmpeg import os import fnmatch import subprocess Bilibili缓存的视频&#xff0c;*280.m4s结尾的是音频文件&#xff0c;*050.m4s结尾的是视频&#xff0c;删除16进制下前9个0&#xff0c;即为正常音/视频 使用os.walk模块&#xff0c;遍历每一个目录&#xf…...

Windows 图形显示驱动开发-WDDM 1.2功能—无显示器系统支持

一、架构设计与启动流程 1.1无显示器系统启动与全流程 graph TDA[UEFI固件] -->|FADT.VGA_NOT_PRESENT1| B[Windows Boot Manager]B -->|加载winload.efi| C[内核初始化]C -->|检测显示设备| D{存在GPU?}D -->|是| E[加载WDDM驱动]D -->|否| F[激活MSBDD虚拟…...

低代码 Web 组态

低代码配置式 Web 组态是一种用于创建 Web 应用程序界面的技术&#xff0c;它允许用户通过图形化界面和少量的代码或无需编写大量代码来配置和定制 Web 页面的布局、外观和交互功能。 一、特点 1、低代码或无代码开发&#xff1a;大大降低了开发门槛&#xff0c;无需专业的编程…...

解决7穴连接器的信号完整性问题

在汽车发动机的系统设计中&#xff0c;信号传输是不可或缺的。在信号传输中起着重要作用的一个关键组件是 7 穴连接器&#xff0c;它提供许多重要功能。 但是&#xff0c;这些连接器可能会遇到一些制造商需要解决的问题&#xff0c;知道如何解决 7 腔连接器中的信号完整性问题…...

GDScript快速入门(适合有其它编程语言基础)

GDScript快速入门&#xff08;适合有其它编程语言基础&#xff09; 从零开始学 GDScript Godot 是一款开源、跨平台的游戏引擎&#xff0c;因其轻量、易用和强大的功能而受到广大开发者的喜爱。在 Godot 中&#xff0c;GDScript 是其专为游戏开发设计的脚本语言&#xff0c;具…...

WEB安全--蓝队日志--RCE数据包分析

一、分析数据包内容 攻击者通过URL请求POST传参的方式试图绕过IPS测试RCE漏洞的利用 URL请求中的内容进行urlcode解码后是这样的&#xff1a; http://资产IP/hello.world?-d allow_url_include1 -d auto_prepend_filephp://input 1. -d allow_url_include1&#xff1a; 使…...

springboot项目添加定时任务,用sftp推送zip包到目标服务器

用sftp推送zip包到目标服务器 任务类里面&#xff0c;主要功能是&#xff0c;定时采集三张表的数据&#xff0c;并把数据转换成csv&#xff0c;三份csv压缩成一个加密的zip包&#xff0c;通过sftp推送到指定的目录下 配置类 Data Configuration ConfigurationProperties(pre…...

Mobaxterm 突破 14个 session 限制

mobaxterm 可以说非常好用&#xff0c;但是免费版对会话有限制&#xff0c;对于有很多虚拟机会话需要存储的我来说确实太少了。 当Xterm会话数量到14个时&#xff0c;发现新增的会话没有保存下来&#xff0c;在左侧菜单无法新增保存会话session。 超过限制时&#xff0c;提示…...

体系结构论文(七十一):Quantifying the Impact of Data Encoding on DNN Fault Tolerance

Quantifying the Impact of Data Encoding on DNN Fault Tolerance 研究动机 深度神经网络&#xff08;DNN&#xff09;在硬件运行时可能遇到位翻转&#xff08;bit-flip&#xff09;错误&#xff0c;特别是在能效和面积敏感的平台上&#xff08;如边缘设备、移动端&#xff0…...

学习笔记十一——零基础搞懂 Rust 函数式编程

&#x1f9e0; 零基础搞懂 Rust 函数式编程&#xff1a;到底什么是 “函数式”&#xff1f; Rust 是一门多范式语言&#xff0c;既可以像 C/Java 那样写“命令式代码”&#xff0c;也支持“函数式编程”。但很多刚入门的小伙伴可能会有这些疑问&#xff1a; 函数不就是函数吗&…...

Spark-SQL2

利用IDEA开发Spark-SQL 自定义函数 UDF&#xff1a; UDAF&#xff08;自定义聚合函数&#xff09; 强类型的 Dataset 和弱类型的 DataFrame 都提供了相关的聚合函数&#xff0c; 如 count()&#xff0c;countDistinct()&#xff0c;avg()&#xff0c;max()&#xff0c;min()。…...

python实战案例:玩具销售数据分析

原创 IT小本本 IT小本本 2025年04月12日 22:45 北京 本文将通过一个玩具销售数据的分析案例&#xff0c;展示如何利用 Python 和数据可视化工具从原始数据中提取有价值的商业洞察。将从数据加载、预处理到可视化分析&#xff0c;逐步揭示玩具销售的规律和趋势。 数据准备与加…...

模拟浏览器指纹:生成与定制特定属性

在现代网络环境中&#xff0c;浏览器指纹是一种强大的标识技术&#xff0c;用于区分不同的浏览器实例。通过收集浏览器的各种属性&#xff08;如用户代理、Canvas 指纹、WebGL 特性等&#xff09;&#xff0c;可以生成一个独特的指纹&#xff0c;用于跟踪用户行为或防止欺诈。本…...

vue+vite 减缓首屏加载压力和性能优化

vuevite 减缓首屏加载压力和性能优化 1、预加载项目必需的组件2、模块加载优化3、HMR 热更新优化4 、环境配置优化5、代码模式优化6、高级优化技巧7、架构级优化打包压缩配置 在vuevite构建的工程里面&#xff0c;性能优化分为开发环境和打包后的生产环境&#xff0c;作为开发首…...

狂神SQL学习笔记十三:Delete 和 Truncate 详解

1、删除 保留表的结构不变&#xff0c;清空表的数据 truncate重新设置 自增列 计数器会归零&#xff0c;如果用delete删除&#xff0c;则自增不会变&#xff0c;重新插入数据时自增会从原来的地方开始...

封装实用的时间选择器组件

<template><!-- 使用该时间选择器组件&#xff0c;重置搜索表单的时候&#xff0c;注意得使用async await让重置表单操作完成后再发起请求 --><div class"dateTimePickerSelectWrap"><el-date-pickerv-model"arr":type"dateType…...

关于Blade框架对数字类型的null值转为-1问题

关于Blade框架对数字类型的null值转为-1问题 问题&#xff1a;最近项目遇到了一个问题&#xff0c;SpringBoot项目后端Long类型的数据&#xff0c;如果是NULL的话&#xff0c;返回给前端的时候是-1。如下图&#xff1a; 分析 是由于使用了 blade 框架&#xff0c;项目启动的…...

如何安全地管理固定功能设备?

什么是固定功能设备&#xff1f; 固定功能设备是指具有特定、单一或有限功能的设备&#xff0c;其功能在设计和制造时就被固定下来&#xff0c;通常难以进行大规模的功能扩展或修改。固定功能设备只需要运行特定的应用程序。自动取款机、销售商家用机器、支付站点以及其他专门…...