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

【Java 数据结构】List,ArrayList与顺序表

目录

一. List

1.1 什么是List

1.2 List 的常见方法

1.3 List 的使用

二. 顺序表

2.1 什么是顺序表

2.2 实现自己的顺序表

2.2.1 接口实现

2.2.2 实现顺序表

三. ArrayList

3.1 ArrayList简介

3.2 ArrayList的三个构造方法

3.2.1 无参构造方法

3.2.2 带一个参数的构造方法

3.3 ArrayList的常见方法

3.4 ArrayList 的遍历

3.4.1 直接打印

3.4.2 for循环遍历

3.4.3 借助for-each遍历

3.4.4 迭代器遍历


一. List

1.1 什么是List

在集合框架中,List是一个接口,继承自Collect

站在数据结构的角度来看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作

1.2 List 的常见方法

下面是List接口中的一些常见方法

1.3 List 的使用

由于List 是一个接口,不能直接实例化对象,但是在集合框架中,ArrayList和LinkedList都实现了List接口


二. 顺序表

2.1 什么是顺序表

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般采用数组存储,ArrayList就是顺序表的一种实现形式

2.2 实现自己的顺序表

在学习ArrayList之前,我们可以先试着写一个自己实现的顺序表,能帮助我们在使用ArrayList的方法以及了解它时更加得心应手

2.2.1 接口实现

public class IList {public void add(int data) { }// 在 pos 位置新增元素public void add(int pos, int data) { }// 判定是否包含某个元素public boolean contains(int toFind) { return true; }// 查找某个元素对应的位置public int indexOf(int toFind) { return -1; }// 获取 pos 位置的元素public int get(int pos) { return -1; }// 给 pos 位置的元素设为 valuepublic void set(int pos, int value) { }//删除第⼀次出现的关键字keypublic void remove(int toRemove) { }// 获取顺序表⻓度public int size() { return 0; }// 清空顺序表public void clear() { }// 打印顺序表,注意:该⽅法并不是顺序表中的⽅法,为了⽅便看测试结果给出的public void display() { }
}

下面,我们自己的顺序表将会实现并重写IList中的所有方法

2.2.2 实现顺序表

import java.util.Arrays;class EmptyListException extends RuntimeException{public EmptyListException(String message) {super(message);}
}class IndexException extends RuntimeException{public IndexException(String message) {super(message);}
}
public class MyArrayList implements IList{public int arr[];public final int Initial_Capacity=10;public int Used_size;public MyArrayList() {this.arr = new int [Initial_Capacity];}@Overridepublic void add(int data) {if(is_full()){grow();}this.arr[Used_size]=data;Used_size++;}@Overridepublic void add(int pos, int data) {if(is_full()){grow();}checkPos(pos);for (int i =Used_size-1; i>=pos; i--) {arr[i+1]=arr[i];}arr[pos]=data;Used_size++;}public boolean is_full(){if(arr.length==Used_size){return true;}return false;}public void grow(){this.arr= Arrays.copyOf(arr,arr.length*2);}@Overridepublic boolean contains(int toFind) {for (int i = 0; i <arr.length; i++) {if(arr[i]==toFind){return true;}}return false;}@Overridepublic int indexOf(int toFind) {for (int i = 0; i <arr.length; i++) {if (arr[i] == toFind) {return i;}}return -1;}@Overridepublic int get(int pos) {check(pos);isEmpty();return arr[pos];}public void check(int pos){if(pos<0||pos>=Used_size){throw new IndexException(pos+"位置下标访问不合法");}}public void checkPos(int pos){if(pos<0||pos>Used_size){throw new IndexException(pos+"位置下标访问不合法");}}public void isEmpty(){if(Used_size==0){throw new EmptyListException("该表为空表");}}@Overridepublic void set(int pos, int value) {check(pos);arr[pos]= value;}@Overridepublic void remove(int toRemove) {int index=indexOf(toRemove);if(index==-1){System.out.println("没有要删除的元素");return;}for (int i =index; i <Used_size-1; i++) {arr[i]=arr[i+1];}Used_size--;}@Overridepublic int size() {return Used_size;}@Overridepublic void clear() {for (int i = 0; i <Used_size; i++) {arr[i]=0;}Used_size=0;//如果数组中的是引用数据类型的元素时,一定要将其全部置为null(避免空间造成浪费)}@Overridepublic void display() {for (int i = 0; i <this.Used_size; i++) {System.out.print(arr[i]+" ");}System.out.println();}
}

注意:

  • 在删除和特定位置添加元素的方法中采用的是覆盖的思想,下面是添加元素到特定位置的流程图(将6添加到3下标位置)

  • 在 clear()中如果要清空的顺序表是存放引用数据类型的话,一定要将其全部设置为null

三. ArrayList

3.1 ArrayList简介

在集合框架中,ArrayList是一个普通的类,实现了List接口。具体框架如下:

注意:

  • ArrayList是以泛型的形式实现的,使用时必须要先实例化
  • ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表

3.2 ArrayList的三个构造方法

3.2.1 无参构造方法

下面是ArrayList类中的源码截取:

 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}private Object[] grow(int minCapacity) {int oldCapacity = elementData.length;if (oldCapacity > 0 || elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {int newCapacity = ArraysSupport.newLength(oldCapacity,minCapacity - oldCapacity, /* minimum growth */oldCapacity >> 1           /* preferred growth */);return elementData = Arrays.copyOf(elementData, newCapacity);} else {return elementData = new Object[Math.max(DEFAULT_CAPACITY, minCapacity)];}}public void add(int index, E element) {rangeCheckForAdd(index);modCount++;final int s;Object[] elementData;if ((s = size) == (elementData = this.elementData).length)elementData = grow();System.arraycopy(elementData, index,elementData, index + 1,s - index);elementData[index] = element;size = s + 1;}

解释:

这里的 elementData 是 ArrayList 内部用于存储元素的数组,DEFAULTCAPACITY_EMPTY_ELEMENTDATA 是一个空数组。当使用无参构造方法创建 ArrayList 时,实际上只是将 elementData 初始化为一个空数组。当向 ArrayList 中添加第一个元素(仅限添加的第一个元素)时, ArrayList 会自动扩容,将数组容量扩展为默认容量(通常是10)。

3.2.2 带一个参数的构造方法

  • ArrayList(int initialCapacity)
public ArrayList(int initialCapacity) {if (initialCapacity > 0) {this.elementData = new Object[initialCapacity];} else if (initialCapacity == 0) {this.elementData = EMPTY_ELEMENTDATA;} else {throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);}}

解释:通过这个构造方法,当传入一个大于0的整数作为参数时, ArrayList 会创建一个具有指定容量的数组来存储元素,这样可以在已知元素大概数量的情况下,减少数组扩容的次数,提高性能。如果传入0,则使用一个空数组。如果传入负数,会抛出异常,因为容量不能为负

  • ArrayList(Collection<? extends E> c)
 public ArrayList(Collection<? extends E> c) {Object[] a = c.toArray();if ((size = a.length) != 0) {if (c.getClass() == ArrayList.class) {elementData = a;} else {elementData = Arrays.copyOf(a, size, Object[].class);}} else {// replace with empty array.elementData = EMPTY_ELEMENTDATA;}}

解释:使用集合类来构造ArrayList,将该集合类中的所有元素用来构造ArrayList,和ArrayList中的 addAll(Collection<? extends E> c)的作用类似,其中Collection<? extends E> c 表示可以传入实现了Collection接口并且泛型参数类型是E/E子类的集合类,下面是一个例子:这里不是一个集合类一个元素(与List的嵌套不同)

public static void main(String[] args) {ArrayList<Integer> list0=new ArrayList<>();list0.add(1);list0.add(2);ArrayList<Integer> list1=new ArrayList<>();list1.add(1);list1.add(2);ArrayList<Integer> list=new ArrayList<>(list0);//使用List0这个集合类来构造listlist.add(100);//向list中添加元素list.addAll(list1); //向list中来添加集合类System.out.println(list);System.out.println(list.size());}打印结果:
[1, 2, 100, 1, 2]
5
public static void main(String[] args) {ArrayList<ArrayList<Integer>> lists=new ArrayList<>();ArrayList<Integer> list3=new ArrayList<>();list3.add(1);list3.add(2);list3.add(3);lists.add(list3);System.out.println(lists.size());}打印结果:1

3.3 ArrayList的常见方法

ArrayList的方法很多,以下只列举常见的几种:

注意:

  • LIst<E>subList(int formIndex,int toIndex) 这个方法要重点注意(是个坑),1. 这个方法的返回值实际上是截取list部分的首地址,如果改变subList中的元素,被截取的原list中的元素也会发生改变,2. 截取部分是[  )

3.4 ArrayList 的遍历

3.4.1 直接打印

 public static void main(String[] args) {ArrayList<Integer> list3=new ArrayList<>();list3.add(1);list3.add(2);list3.add(3);System.out.println(list3);}打印结果:[1,2,3]

3.4.2 for循环遍历

public static void main(String[] args) {ArrayList<Integer> list3=new ArrayList<>();for (int i = 0; i <list3.size(); i++) {System.out.print(list3.get(i)+" ");}System.out.println();}打印结果:1 2 3

3.4.3 借助for-each遍历

public static void main(String[] args) {ArrayList<Integer> list3=new ArrayList<>();list3.add(1);list3.add(2);list3.add(3);for(Integer integer: list3){System.out.print(integer+" ");}}打印结果:1 2 3

3.4.4 迭代器遍历

 public static void main(String[] args) {ArrayList<Integer> list3=new ArrayList<>();list3.add(1);list3.add(2);list3.add(3);Iterator<Integer> it=list3.iterator();while(it.hasNext()){System.out.print(it.next()+" ");}System.out.println();ListIterator<Integer> it2=list3.listIterator(list3.size());while(it2.hasPrevious()){  //倒着打印System.out.print(it2.previous()+" ");}System.out.println();ListIterator<Integer> it3=list3.listIterator(1);while(it3.hasNext()){   //从指定位置打印System.out.print(it3.next()+" ");}}打印结果:
1 2 3 
3 2 1 
2 3

注意:

  • ListIterator类 实际上继承了 Iterator类,扩展了Iterator类中的方法,新增hasPrevious()和Previous()等方法,且在调用ListIterator()可传入参数,从特定位置进行打印
  • 原理:Arraylist中重写了literable接口中iterator()方法(),返回值是Iterator接口的对象(Iterator接口没有继承接口),通过这个对象可以调用各种方法进行遍历
  • ArrayList的扩容机制是扩1.5倍

相关文章:

【Java 数据结构】List,ArrayList与顺序表

目录 一. List 1.1 什么是List 1.2 List 的常见方法 1.3 List 的使用 二. 顺序表 2.1 什么是顺序表 2.2 实现自己的顺序表 2.2.1 接口实现 2.2.2 实现顺序表 三. ArrayList 3.1 ArrayList简介 3.2 ArrayList的三个构造方法 3.2.1 无参构造方法 3.2.2 带一个参数的…...

用Python做有趣的AI项目1:用 TensorFlow 实现图像分类(识别猫、狗、汽车等)

项目目标 通过构建卷积神经网络&#xff08;CNN&#xff09;&#xff0c;让模型学会识别图片中是什么物体。我们将使用 CIFAR-10 数据集&#xff0c;它包含 10 类&#xff1a;飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。 &#x1f6e0;️ 开发环境与依赖 安装依赖&…...

正确应对监管部门的数据安全审查

首席数据官高鹏律师团队编著 在当今数字化时代&#xff0c;数据安全已成为企业及各类组织面临的重要议题&#xff0c;而监管部门的数据安全审查更是关乎其生存与发展的关键挑战。随着法律法规的不断完善与监管力度的加强&#xff0c;如何妥善应对这一审查&#xff0c;避免潜在…...

Springboot用IDEA打jar包 运行时 错误: 找不到或无法加载主类

Springboot用IDEA打jar包 运行时 错误: 找不到或无法加载主类 今天遇到个很神奇的问题。 就是我在打包我项目后。用java -jar命令的话 是无法启动这个项目的。 但是我在idea里面进行运行 就可以运行 先说结论 因为我这个是jdk17的项目 而我本机的jdk是1.8 所以说就会出现…...

【Linux网络】构建与优化HTTP请求处理 - HttpRequest从理解到实现

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

【高频考点精讲】实现垂直居中的多种CSS方法比较与最佳实践

前端工程师必看:7种CSS垂直居中方案大比拼(附真实代码) 今天咱们聊聊前端开发中最让人头疼的问题之一——垂直居中。不知道你们有没有遇到过这种情况:明明设置了margin: 0 auto水平居中了,垂直方向怎么折腾都不对劲。全栈老李当年刚入行时,为了一个div居中能折腾一晚上,…...

Java 字符串基础介绍

在 Java 编程中&#xff0c;字符串是不可或缺的一部分。无论是用户界面的消息显示、文件路径的处理&#xff0c;还是用户信息的存储&#xff0c;字符串都扮演着至关重要的角色。本文将带您深入了解 Java 字符串的特性、用法以及一些高级技巧&#xff0c;帮助您在编程实践中更加…...

SpringBoot中暗藏的设计模式

一、工厂模式 想象一下你去奶茶店点单——你只需要告诉店员要"珍珠奶茶"&#xff0c;后厨就会自动完成煮茶、加料、封口整套流程。这就是工厂模式在SpringBoot中的体现。 典型应用场景&#xff1a; Bean的创建过程&#xff08;ApplicationContext就是超级工厂&…...

使用 AFL++ 对 IoT 二进制文件进行模糊测试 - 第一部分

American fuzzy lop 是一款面向安全的模糊测试器,它采用一种新型的编译时插桩和遗传算法,可以自动发现干净、有趣的测试用例,从而触发目标二进制文件中新的内部状态。这显著提高了模糊测试代码的功能覆盖率。 AFL 的地址是https://lcamt uf.coredump.cx/afl/ 。它已经有一段…...

Java 线程的六种状态与完整生命周期详解

&#x1f680; Java 线程的几种状态详解 在 Java 中&#xff0c;线程状态&#xff08;Thread State&#xff09;是由 Thread.State 枚举定义的&#xff0c;总共有六种&#xff1a; 状态含义典型场景示例NEW新建状态&#xff0c;线程对象刚创建&#xff0c;还未调用 start() 方…...

常见的机器视觉通用软件

国际常用软件 OpenCV &#xff1a; 特点 &#xff1a;开源免费&#xff0c;社区支持强大&#xff0c;拥有丰富的图像处理和计算机视觉算法库&#xff0c;支持多种编程语言&#xff0c;如 C、Python、Java 等&#xff0c;可实现对象检测、图像分割、特征提取等功能&#xff0c;具…...

使用 Frida 绕过 iOS 应用程序中的越狱检测

在这篇博文中,我们将介绍**Frida**,它是用于移动应用程序安全分析的真正有趣的工具之一。 我们在高级 Android 和 iOS 漏洞利用培训中也深入讲解了这一点,您可以在这里注册 -培训链接 即使您从未使用过 Frida,本文也将作为指南,帮助您进入 Frida 的世界,进行移动应用程…...

创建可执行 JAR 文件

&#x1f4e6; 创建可执行 JAR 文件 &#x1f539; 概述 在完成示例的最后环节&#xff0c;我们将创建一个完全自包含的可执行 jar 文件&#xff0c;该文件可直接在生产环境运行。可执行 jar&#xff08;又称 uber jar 或 fat jar&#xff09;是一种包含编译后类文件及全部运行…...

LIDC-IDRI数据集切割代码教程【pylidc库】

数据集&#xff1a; 通过网盘分享的文件&#xff1a;LIDC 链接: 百度网盘 请输入提取码 提取码: ywb8 代码&#xff1a; 通过网盘分享的文件&#xff1a;LIDC-IDRI-Preprocessing.rar 链接: 百度网盘 请输入提取码 提取码: b1za 【代码里的部分数据就不删了&#xff0c;方…...

Java数据结构——Stack

Stack 栈的概念和使用栈的概念栈的使用 栈的应用出栈元素序列有效的括号栈的压入、弹出序列逆波兰表达式最小栈 栈的概念和使用 栈的概念 栈(Stack)&#xff1a;一种特殊的线性表&#xff0c;只允许再栈的一端进行插入和删除元素&#xff0c;这一端点被称为栈顶&#xff0c;另…...

SMT贴片加工费控制与优化实践指南

内容概要 SMT贴片加工费的控制与优化需建立在对成本结构的系统性认知基础上。本节从物料采购、设备运行、工艺参数三大维度切入&#xff0c;结合BOM清单管理、钢网使用规范等实操环节&#xff0c;构建覆盖全流程的降本增效框架。以下表格列举了SMT加工成本的典型构成要素及其占…...

Eclipse 插件开发 4 工具栏

Eclipse 插件开发 4 工具栏 1 增加工具(push)2 增加工具(toggle)3 增加工具(radio) 位置locationURI备注菜单栏menu:org.eclipse.ui.main.menu添加到传统菜单工具栏toolbar:org.eclipse.ui.main.toolbar添加到工具栏 style 值含义显示效果push普通按钮&#xff08;默认&#x…...

Dify中的文本分词处理技术详解

Dify中的文本分词处理技术详解 引言核心架构概览索引处理器工厂 文本分词技术详解基础分词器增强型递归字符分词器固定分隔符文本分词器递归分割算法 索引处理器中的分词应用特殊索引处理器的分词特点问答索引处理器父子索引处理器 分词技术的应用场景技术亮点与优势总结 引言 …...

Linux之netlink(2)libnl使用介绍(1)

Linux之netlink(2)Libnl3使用介绍(1) Author&#xff1a;Onceday Date&#xff1a;2025年4月26日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可查看专栏: Linux内核知识_Once-Day的博客-CSDN博客 本文翻译自libnl3官方文档&#xff1a;Netlink Library (libnl) 参考文档…...

【2025 最新前沿 MCP 教程 04】通信渠道:理解 MCP 传输机制

文章目录 1. 开始啦&#xff01;2. 本地集成与标准输入输出&#xff08;stdio&#xff09;3. 通过 HTTP 实现 SSE&#xff08;服务器发送事件&#xff09;的远程通信4. 展望未来&#xff1a;向可流式 HTTP 的过渡 1. 开始啦&#xff01; 在第三章中&#xff0c;我们解析了模型…...

Qt Charts 绘制曲线图示例

Qt Charts 绘制曲线图示例 Qt Charts 是 Qt 的图表模块&#xff0c;可用于绘制折线图、曲线图等。以下是实现步骤&#xff1a; 1. 配置项目文件 在 .pro 文件中添加 Charts 模块&#xff1a; QT charts2. 创建基础图表 #include <QtCharts>// 创建图表视图和图表对…...

统计学_一元线性回归知识点梳理

1 变量间关系的度量 1.1 变量间的关系 &#xff08;1&#xff09;相关关系&#xff1a;变量之间是不确定的数量关系&#xff0c;比如农作物产量和施肥量的关系。&#xff08;2&#xff09;函数关系&#xff1a;变量之间是一一确定的对应的关系&#xff0c;y 完全依赖于 x。 …...

【计算机视觉】CV项目实战- 深度解析TorchVision_Maskrcnn:基于PyTorch的实例分割实战指南

深度解析TorchVision_Maskrcnn&#xff1a;基于PyTorch的实例分割实战指南 技术背景与核心原理Mask R-CNN架构解析项目特点 完整实战流程环境准备硬件要求软件依赖 数据准备与标注1. 图像采集2. 数据标注3. 数据格式转换 模型构建与训练1. 模型初始化2. 数据加载器配置3. 训练优…...

数据分析岗位-相关知识

数据分析岗位 1.大数据2.业务&#xff08;朴素理念&#xff09; 1.大数据 数据流向 &#xff1a;MySQL等传统业务数据&#xff08;结构、半结构、非结构&#xff09; → ETL → 数据仓库 / 数据计算 → BI&#xff08;BI也提供计算能力&#xff09; sequenceDiagramMySQL->…...

使用 Truffle 和 Ganache 搭建本地以太坊开发环境并部署一个简单智能合约

使用 Truffle 和 Ganache 搭建本地以太坊开发环境并部署一个简单智能合约的详细步骤&#xff1a; 一、环境搭建 安装 Node.js 和 npm Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境&#xff0c;npm 是 Node.js 的包管理器。可以从 Node.js 官方网站下载安装程序…...

Set的学习

1. Set是继承自Collection的一个接口类 2. Set中只存储了key&#xff0c;并且要求key一定要唯一 3. TreeSet的底层是使用Map来实现的&#xff0c;其使用key与Object的一个默认对象作为键值对插入到Map中的 4. Set最大的功能就是对集合中的元素进行去重 5. 实现Set接口的常用…...

Python爬虫实战:获取高考资源网各学科精品复习资料

一、引言 高考资源网拥有丰富的高考复习资料,对于我们而言,获取这些资源并整理分享能为考生提供有价值的帮助。然而,手动从网站查找和下载资源效率低且易出错。利用 Python 爬虫技术可实现自动化资源获取,提高工作效率。但在爬取过程中,需考虑网站反爬机制,采取相应措施…...

Linux下编译并打包MNN项目迁移至其他设备

1. 构建项目结构 该项目是利用MNN框架对MTCNN网络进行推理&#xff0c;实现对目标的实时检测 运行环境&#xff1a;Linux 相关库&#xff1a;opencv&#xff0c;MNN 先给出项目的总体结构&#xff0c;如下&#xff1a; mtcnn_mnn/ ├── include/ │ ├── opencv2/ …...

WPF框架中异步、多线程、高性能、零拷贝技术的应用示例

WPF框架中异步、多线程、高性能与零拷贝技术应用示例 一、异步编程在WPF中的应用 1. 异步数据加载(避免UI冻结) // ViewModel中的异步数据加载示例 public class MainViewModel : INotifyPropertyChanged {private ObservableCollection<string> _items;public Obse…...

SpringBoot实现的后端开发

目录 一、设计阶段 1.设计ER图 2.创建数据库表 二、项目环境搭建 1.创建项目 2.在pom.xml中添加依赖 3.配置数据库连接 4.状态码的封装 5.开发自定义异常 6.密码加密 7.规范时间格式展示 8.添加Guava本地缓存 9.JWT 三、构建项目开发 1.创建项目结构 2.开发实…...

IntelliJ IDEA修改实体类成员变量的名称(引入了该实体类的全部文件也会自动更新变量的名称)

文章目录 1. 问题引入2. 修改实体类成员变量的名称2.1 鼠标双击要修改的变量2.2 按下SHIFT F6快捷键 更多 IntelliJ IDEA 的使用技巧可以查看 IntelliJ IDEA 专栏&#xff1a; IntelliJ IDEA 1. 问题引入 在使用IntelliJ IDEA开发项目时&#xff0c;你是否遇到过以下难题 需…...

Weaviate使用入门:从零搭建向量数据库的完整指南

一、Weaviate简介与核心优势 Weaviate是一款开源向量搜索引擎&#xff0c;专为存储和检索高维向量数据设计&#xff0c;支持文本、图像等多种媒体类型。其核心功能包括语义搜索、问答提取、分类等&#xff0c;具备以下独特优势&#xff1a; 低延迟&#xff1a;毫秒级响应时间…...

element ui el-col的高度不一致导致换行

问题&#xff1a;ell-col的高度不一致导致换行&#xff0c;刷新后审查el-col的高度一致 我这边是el-col写的span超过了24&#xff0c;自行换行&#xff0c;测试发现初次进入里面的高度渲染的不一致&#xff0c;有的是51px有的是51.5px 问题原因分析 Flex布局换行机制 Elemen…...

Windows 安装 MongoDB 教程

Windows 安装 MongoDB 教程 MongoDB 是一个开源的 NoSQL 数据库&#xff0c;它使用文档存储模型而不是传统的关系表格。它非常适合需要处理大量数据并且需要高性能、可扩展性的应用场景。下面是如何在 Windows 系统上安装 MongoDB 的详细步骤。 一、准备工作 确保你的 Windo…...

23种设计模式-行为型模式之观察者模式(Java版本)

Java 观察者模式&#xff08;Observer Pattern&#xff09;详解 &#x1f9e0; 什么是观察者模式&#xff1f; 观察者模式是一种行为型设计模式&#xff0c;定义对象之间的一种一对多的依赖关系&#xff0c;使得每当一个对象状态发生变化时&#xff0c;所有依赖它的对象都会得…...

从“拼凑”到“构建”:大语言模型系统设计指南!

你有没有试过在没有说明书的情况下组装宜家家具?那种手忙脚乱却又充满期待的感觉,和设计大语言模型(LLM)系统时如出一辙。如果没有一个清晰的计划,很容易陷入混乱。我曾经也一头扎进去,满心期待却又手足无措,被网上那些复杂的架构图搞得晕头转向。于是,我坐下来,把它们…...

云原生--核心组件-容器篇-3-Docker三大核心之--镜像

1、定义与作用 定义&#xff1a; Docker镜像是一个只读的模板&#xff0c;包含运行应用程序所需的所有内容&#xff0c;包括代码、依赖库、环境变量、配置文件等。简单来说&#xff0c;Docker镜像是一个轻量级、独立、可执行的软件包&#xff0c;它包含了运行某个软件所需的所有…...

在QML中获取当前时间、IP和位置(基于网络请求)

目录 引言相关阅读最终效果代码详解1. 基础框架与窗口设置2. IP定位功能实现3. IP获取功能4. 时间更新与应用初始化5. 用户界面布局 总结工程下载 引言 在本文中&#xff0c;我们将探讨如何使用Qt Quick构建一个简单的系统信息显示应用。该应用能够获取当前系统时间、IP地址以…...

Nuxt3中使用UnoCSS指南

Nuxt3中使用UnoCSS指南 UnoCSS是一个高度可定制的、原子化CSS引擎&#xff0c;可以轻松集成到Nuxt3项目中。下面介绍如何在Nuxt3中安装和配置UnoCSS。 安装步骤 安装UnoCSS的Nuxt模块&#xff1a; # 使用pnpm pnpm add -D unocss unocss/nuxt# 使用yarn yarn add -D unocss…...

【计算机网络】TCP的四种拥塞控制算法

TCP&#xff08;传输控制协议&#xff09;是互联网协议套件中用于在网络中两个主机之间提供可靠、有序和错误检测数据传输的协议。TCP使用拥塞控制机制来避免网络拥塞&#xff0c;确保网络资源的有效利用。以下是TCP中常见的四种拥塞控制算法&#xff1a; 慢启动&#xff08;S…...

WebAssembly全栈革命:在Rust与JavaScript之间构建高性能桥梁

一、WASM的全栈渗透图谱 1. 性能临界点的突破 // Rust实现的斐波那契计算 #[wasm_bindgen] pub fn wasm_fib(n: i32) -> i32 {match n {0 > 0,1 > 1,_ > wasm_fib(n-1) wasm_fib(n-2)} }// JavaScript等效实现对比 console.time(js); jsFib(40); // 1024ms cons…...

深度理解linux系统—— 了解操作系统

一、冯诺依曼体系结构 现在我们常见的计算机&#xff08;笔记本电脑等&#xff09;和不常见的计算机&#xff08;服务器&#xff09;它们都满足冯诺依曼体系。 我们可以把计算机理解成一个个硬件组成的 输入设备&#xff1a;键盘、鼠标、摄像头、网卡、磁盘等输出设备&#xf…...

【fork初体验】

文章目录 Linux 实验&#xff1a;深入理解 fork 系统调用一、实验目的二、实验环境三、实验内容与步骤&#xff08;一&#xff09;打印进程的进程 ID 和父进程 ID1. 编写程序2. 编译与运行3. 运行结果 &#xff08;二&#xff09;使用 fork 系统调用创建进程并加入循环语句1. 编…...

区块链VS传统数据库:金融数据存储的“信任”与“效率”博弈

在金融行业数字化转型的浪潮中&#xff0c;数据存储技术选型已成为核心议题。区块链技术凭借其去中心化、不可篡改等特性强势崛起&#xff0c;而传统数据库&#xff08;如关系型数据库MySQL、分布式数据库&#xff09;凭借成熟生态和高效性能仍占据主导地位。如何在两者之间做出…...

Linux渗透测试

Linux渗透测试 比赛题库-Linux渗透测试 文章目录 Linux渗透测试比赛题库-Linux渗透测试 前言一、解题过程1.通过本地PC中渗透测试平台Kali对靶机场景进行系统服务及版本扫描渗透测试&#xff0c;并将该操作显示结果中Apache服务对应的版本信息字符串作为Flag值提交&#xff1b…...

ORA-02069错误排查实录:从 Database Link 到 Global Names 的陷阱

文章目录 错误重现根因解决方案1.设置GLOBAL_NAMEStrue2.全部业务逻辑放在在远端执行 在日常的 Oracle 数据同步任务中&#xff0c;我们经常透过 Database Link&#xff08;DBLink&#xff09; 进行跨数据库查询与写入。某日&#xff0c;我们在执行一段 INSERT INTO … SELECT …...

【CF闯关练习】—— 1200分

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;cf闯关练习 &#x1f48c;其他专栏&#xff1a; &#x1f534;每日一题 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓…...

正则表达式三剑客之——grep和sed

目录 一.grep 1.1定义 1.2核心功能 1.3基本语法 1.4常用选项 二.sed 2.1 定义 2.2 工作原理 2.3 基本语法 2.3.1常用选项 2.3.2sed自身脚本语法 1. 基本组成 2. 地址 3. 命令 2.3.3 sed替换查找 1 基本语法 2.sed替换查找的实例 3.分组后向引用 4 变量调…...

i18n-ai-translate开源程序,可以使用DeepSeek等模型将您的 i18nJSON翻译成任何语言

一、软件介绍 文末提供程序和源码下载 i18n-ai-translate开源程序使用 DeepSeek等模型可以将您的 i18n JSON 翻译成任何语言。 无缝翻译本地化文件。支持嵌套翻译文件的目录。需要i18next样式的JSON 文件&#xff08;文末一并提供下载&#xff09;。 二、模式 CSV 模式 三个…...

关于Android Studio的Gradle各项配置

Gradle 构建概览 Android 应用通常使用 Gradle 构建系统构建。在深入了解如何配置 build 之前&#xff0c;我们先来探索 build 背后的概念&#xff0c;以便您全面了解系统。 什么是 build&#xff1f; 构建系统会将源代码转换为可执行应用。构建通常涉及多个工具&#xff0c;用…...