数据结构:ArrayList简单实现与常见操作实例详解
目录
1.顺序表概念
2.自己实现
1.准备工作
接口
MyArrayList的定义
2.具体接口实现
添加
判满
扩容
查找
获得pos位置的值 和 更改pos位置的值
判空
删除
得到数组长度
清空数组
打印
3.ArrayList
1.简介
2.使用
1.ArrayList的构造
无参构造
有参构造:参数为initialCapacity
2.常见操作
3.遍历
4.ArrayList具体使用实例
杨辉三角
解题思路
代码
简单洗牌算法
规则
5.顺序表复杂度分析
1.顺序表概念
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成 数据的增删查改。
2.自己实现
为了方便学习jdk原生类ArrayList,我们通过自己实现部分接口,帮助我们理解和更好的使用它。
1.准备工作
先创建一个类MyArrayList和一个接口ILIst。接口中的抽象方法实际就是为了解决数据结构增删查改的功能。
接口
public interface IList {//尾部添加public void add(int data);//在pos位置添加public void add(int data,int pos );//判满boolean isFull();//判断是否包含某元素public boolean contains(int toFind);//返回找到元素下标,找不到返回-1public int indexOf(int toFind);//得到pos位置的值public int get(int pos);//替换pos位置的值为valuepublic void set(int pos,int value);//删除remove第一次出现的值public void remove(int toRemove);//返回顺序表长度public int size();//清空顺序表public void claer();//打印public void display();
}
通过实现接口中的方法,完成MyArrayList的编写。
MyArrayList的定义
顺序表的是指就是数组。所以MyArrayList的成员变量就是数组array,数组的大小和实际使用的空间。
private int[] array;//顺序表本质是控制数组private int useSize;//实际使用的空间private final int DEFINE_CAPACITY = 10;//默认容量public MyArrayList() {this.array = new int[DEFINE_CAPACITY];}
2.具体接口实现
添加
对于数组的添加元素的操作其实是很简单的,不过我们需要在添加元素之前判断数组元素是否已满。
判满
public boolean isFull() {return this.useSize == this.array.length;}
判满有两个结果,一个是已满需要扩容,另一个是未满。
扩容
private void grow(){this.array = Arrays.copyOf(this.array,this.array.length * 2);}
//2倍扩容
经过判满和扩容,数组已经有空间来添加新的元素。
//尾插@Overridepublic void add(int data) {if(isFull()){grow();}this.array[this.useSize++] = data;}//在pos位置添加data,需要挪动数据@Overridepublic void add(int data, int pos) {try {Checkpos2(pos);if(isFull()){grow();}for (int i = this.useSize - 1; i >= pos; i--) {this.array[i+1] = this.array[i];}this.array[pos] = data;this.useSize++;}catch(PositionOutOfBoundsException e){e.printStackTrace();}}
添加的业务逻辑就不再赘述了,在pos位置添加data的时候,需要注意检查pos的合法性。对于数组的下标,编译器的检查是十分严格的,我们不希望也不允许数组发生越界的情况。所以写了一个异常类PositionOutOfBoundsException来帮我们捕捉错误。
private void Checkpos2(int pos){if(pos < 0 || pos > this.useSize){throw new PositionOutOfBoundsException("pos位置不合法");}}public class PositionOutOfBoundsException extends RuntimeException{public PositionOutOfBoundsException() {super();}public PositionOutOfBoundsException(String message) {super(message);}
}
查找
遍历数组即可。
//找到返回true,找不到返回false@Overridepublic boolean contains(int toFind) {for (int i = 0; i < this.useSize; i++) {if(toFind == this.array[i]){return true;}}return false;}//找到返回下标,找不到返回-1@Overridepublic int indexOf(int toFind) {for (int i = 0; i < this.useSize; i++) {if(toFind == this.array[i]){return i;}}return -1;}
获得pos位置的值 和 更改pos位置的值
//获得
@Overridepublic int get(int pos) {try {isEmpty();Checkpos1(pos);return this.array[pos];}catch (PositionOutOfBoundsException e){e.printStackTrace();}catch (ListEmptyException e){e.printStackTrace();}return -1;}//更改@Overridepublic void set(int pos, int value) {if(pos == 0){this.array[pos] = value;}try {isEmpty();Checkpos1(pos);this.array[pos] = value;}catch (PositionOutOfBoundsException e){e.printStackTrace();}catch (ListEmptyException e){e.printStackTrace();}}private void Checkpos1(int pos){if(pos < 0 || pos >= this.useSize){throw new PositionOutOfBoundsException("pos位置不合法");}}//与Checkpos2不同的是此场景pos等于useSize也是不允许的
通过上面添加的介绍,我们可以明白这两个方法也需要检查pos的合法性(和上面pos的检查稍有不同,具体场景集体分析)。同时对于这两个方法,如果数组为空,那么获得pos位置的值就变的毫无意义。所以我们需要判断数组是否为空。同时写一个异常类ListEmptyException来协助检查。
判空
private void isEmpty(){if(this.useSize == 0){throw new ListEmptyException("当前顺序表为空!");}}public class ListEmptyException extends RuntimeException{public ListEmptyException() {super();}public ListEmptyException(String message) {super(message);}
}
删除
@Overridepublic void remove(int toRemove) {try {isEmpty();int pos = indexOf(toRemove);for (int i = pos; i < this.useSize - 1; i++) {this.array[i] = this.array[i + 1];}this.useSize--;}catch (ListEmptyException e){e.printStackTrace();}}
删除也需要判空,删除的业务逻辑是找到删除的位置,再挪动数据覆盖。
得到数组长度
@Overridepublic int size() {return this.useSize;}
清空数组
@Overridepublic void claer() {//如果是引用类型,需要把每个位置都置null
// for (int i = 0; i < this.useSize; i++) {
// array[i] = null;
// }this.useSize = 0;}
打印
@Overridepublic void display() {for (int i = 0; i < this.useSize; i++) {System.out.print(this.array[i] + " ");}System.out.println();}
}
3.ArrayList
1.简介
ArrayList 是 Java 中基于动态数组实现的列表类,属于 java.util 包的核心集合类。
1. ArrayList是以泛型方式实现的,使用时必须要先实例化
2. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问
3. ArrayList实现了Cloneable接口,表明ArrayList是可以clone的
4. ArrayList实现了Serializable接口,表明ArrayList是支持序列化的
5.ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表
2.使用
1.ArrayList的构造
我们在对ArrayList对象实例化的时候可以观察到IDEA对其的代码补全,会有三种不同的构造,如下图:
我们来看看ArrayList的源码,更深一层次的理解ArrayList的构造。看源码!(只看有关的部分,画图比较容易讲解,所以通过画图来看)
这里面有两个空数组对于刚学习的人来说是比较陌生的。暂且已知的只是它们是空的数组,并不知道它们的用处。了解了下面就明白了。
无参构造
通过add一步一步找到扩容的源码。我们就只看帮助理解空数组2的部分。
所以得出结论:在无参构造被触发的时候并没有立即分配容量为10的空间,只是把一个空数组给到类元素数组,分配空间是在add里发生的。
有参构造:参数为initialCapacity
有参构造:参数为参数为Collection<? extends E> c
首先需要理解参数Collection<? extends E> c是什么意思?
Collection代表参数 c 必须是一个集合(Collection 类型),<? extends E>代表集合元素类型是E或是E的子类。
那么就意味着ArrayList可以传入像List<Interger>这样的集合:
ArrayList<Integer> arrayList = new ArrayList<>(3);arrayList.add(1);arrayList.add(1);arrayList.add(1);//有参:参数为Collection<? extends E> cArrayList<Integer> List3 = new ArrayList<>(arrayList);List3.add(4);System.out.println(List3);//运行结果
//[1, 1, 1, 4]
源码:
2.常见操作
ArrayList提供的方法很多,我演示常见的一些。
public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();//boolean add(E e) 尾插elist.add(1);list.add(2);list.add(3);list.add(4);list.add(5);// void add(int index, E element) 在index 插 elist.add(1,999);System.out.println("list"+list);// boolean addAll(Collection<? extends E> c) 尾插c中的元素ArrayList<Integer> list2 = new ArrayList<>();list2.add(1);list2.addAll(list);System.out.println("list2:"+list2);}//运行结果
//list[1, 999, 2, 3, 4, 5]
//list2:[1, 1, 999, 2, 3, 4, 5]
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(2);System.out.println(list);
// E remove(int index) 删除index的值list.remove(3);System.out.println(list);
// boolean remove(Object o) 删除遇到的第一个olist.remove(Integer.valueOf(2));//注意:参数是Object oSystem.out.println(list);
// E get(int index) 获得index的值System.out.println(list.get(2));
// E set(int index, E element) 更改index的值为elementlist.set(3,1000);System.out.println(list);}//运行结果
//[1, 2, 3, 4, 5, 2]
//[1, 2, 3, 5, 2]
//[1, 3, 5, 2]
//5
//[1, 3, 5, 1000]
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(2);System.out.println(list);//boolean contains(Object o) 判断o是否在表中System.out.println(list.contains(new Integer(4)));System.out.println(list.contains(new Integer(100)));// int indexOf(Object o) 返回第一个o的下标System.out.println(list.indexOf(new Integer(2)));// int lastIndexOf(Object o) 返回最后一个o的下标System.out.println(list.lastIndexOf(new Integer(2)));// List<E> subList(int fromIndex, int toIndex) 截取部分List,左闭右开List<Integer> list2 = list.subList(3,5);System.out.println(list2);list2.set(0,999);System.out.println("list" + list);System.out.println("list2" + list2);//可以发现对list2的元素更改对list也产生了影响,说明subList方法并没有产生新的对象}//运行结果
//[1, 2, 3, 4, 5, 2]
//true
//false
//1
//5
//[4, 5]
//list[1, 2, 3, 999, 5, 2]
//list2[999, 5]
3.遍历
直接上代码
public static void main(String[] args) {//ArrayList的遍历ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(6);list.add(7);System.out.println(list);//forifor (int i = 0; i < list.size(); i++) {System.out.print(list.get(i) + " ");}System.out.println();//foreachfor (Integer element:list) {System.out.print(element + " ");}System.out.println();//迭代器iteratorIterator<Integer> it = list.iterator();while(it.hasNext()){System.out.print(it.next() + " ");}System.out.println();//迭代器listIterator(是iterator的子接口,可以实现双向遍历)ListIterator<Integer> it2 = list.listIterator(list.size());while(it2.hasPrevious()){System.out.print(it2.previous() + " ");}System.out.println();}//运行结果
//[1, 2, 3, 4, 6, 7]
//1 2 3 4 6 7
//1 2 3 4 6 7
//1 2 3 4 6 7
//7 6 4 3 2 1
4.ArrayList具体使用实例
杨辉三角
题目链接
题目分析
解题思路
代码
public List<List<Integer>> generate(int numRows) {List<List<Integer>> ret = new ArrayList<>();//第0行List<Integer> list0 = new ArrayList<>();list0.add(1);ret.add(list0);//后面的行for (int i = 1; i < numRows; i++) {//第一个元素List<Integer> curRow = new ArrayList<>();curRow.add(1);//中间元素List<Integer> perRow = ret.get(i-1);//获得上一行数组for (int j = 1; j < i; j++) {int val1 = perRow.get(j);int val2 = perRow.get(j-1);curRow.add(val1 + val2);}//最后一个元素curRow.add(1);ret.add(curRow);}return ret;}
简单洗牌算法
规则
一副扑克牌(除了大小王),三个人,每个人轮流抓 5 张牌。可以显示三个人的手牌和牌堆剩余的牌。
业务逻辑包括:获取扑克、打乱扑克和发牌。看代码实现:
package card.dealing;public class Card {private String suit;//花色private int rank;//牌的大小public Card(String suit, int rank) {this.suit = suit;this.rank = rank;}@Overridepublic String toString() {return "{" + suit + rank + "} ";}
}
package card.dealing;import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class CardDemo {public static final String[] suits = {"♥","♣","♦","♠"};//产生一副牌public List<Card> BuyCard(){List<Card> cards = new ArrayList<>();for (int i = 0; i < 13; i++) {for (int j = 0; j < 4; j++) {String suit = suits[j];//获取花色int rank = j + 1;//牌的数字Card card = new Card(suit,rank);cards.add(card);}}return cards;}//打乱一副牌public List<Card> MixCard(List<Card> cards){Random random = new Random();for (int i = cards.size()-1; i > 0; i--) {int index = random.nextInt(i);swap(cards, index, i);}return cards;}private void swap(List<Card> cards,int j,int i){Card tmp = cards.get(j);cards.set(j,cards.get(i));cards.set(i,tmp);}//发牌:三个人,依次发五张public List<List<Card>> play(List<Card> cards){//三个人List<Card> hand0 = new ArrayList<>();List<Card> hand1 = new ArrayList<>();List<Card> hand2 = new ArrayList<>();List<List<Card>> ret = new ArrayList<>();ret.add(hand0);ret.add(hand1);ret.add(hand2);for (int i = 0; i < 5; i++) {for (int j = 0; j < 3; j++) {Card card = cards.remove(0);//从牌堆顶拿牌ret.get(j).add(card);}}return ret;}
}
package card.dealing;import java.util.List;public class test {public static void main(String[] args) {CardDemo cardDemo = new CardDemo();//获取牌List<Card> cradList = cardDemo.BuyCard();System.out.println(cradList);cardDemo.MixCard(cradList);System.out.println(cradList);//发牌List<List<Card>> ret = cardDemo.play(cradList);for (int i = 0; i < ret.size(); i++) {System.out.println("这是第"+(i+1)+ "的牌" +ret.get(i));}System.out.println("剩下的牌"+ cradList);}
}
5.顺序表复杂度分析
通过索引访问元素的时间复杂度为 O(1)。
中间插入或删除元素需要移动后续元素,时间复杂度为 O(n)。
相关文章:
数据结构:ArrayList简单实现与常见操作实例详解
目录 1.顺序表概念 2.自己实现 1.准备工作 接口 MyArrayList的定义 2.具体接口实现 添加 判满 扩容 查找 获得pos位置的值 和 更改pos位置的值 判空 删除 得到数组长度 清空数组 打印 3.ArrayList 1.简介 2.使用 1.ArrayList的构造 无参构造 有参构造&a…...
C++之fmt库介绍和使用(1)
C之fmt库介绍与使用(1) Author: Once Day Date: 2025年5月12日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 …...
嵌入式自学第二十一天(5.14)
gdb逻辑调试器: gcc 调试,发行版 gcc -g 调试版本,体积大,有源码。 一般调试:gdb a.out b n.c:行数 :设置断点,运行到这个位置,程序暂停。(可以直接加行数) r运行 n执行下…...
位与运算
只有当除数是 2 的幂次方(如 2、4、8、16...)时,取模运算才可以转换为位运算。 int b 19;int a1 b % 16; // 传统取模运算int a2 b & 15; // 位运算替代取模printf("b %d\n", b);printf("b %% 8 %d\n",…...
SparkSQL操作Mysql(2)
创建数据库和表 我们去创建一个新的数据库,数据表,并插入一条数据。 参考代码如下: -- 创建数据库 CREATE DATABASE spark; -- 使用数据库 USE spark; -- 创建表 create table person(id int, name char(20), age int); -- 插入示例数…...
Linux 中 open 函数的本质与细节全解析
一、open简介 在 Linux 下,一切皆文件。而对文件的读写,离不开文件的“打开”操作。虽然 C 语言标准库提供了方便的 fopen,但更底层、更强大的是系统调用 open,掌握它能让你对文件系统控制更细致,在系统编程、驱动开发…...
对抗系统熵增:从被动救火到主动防御的稳定性实战
📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…...
高速系统设计实例设计分析二
6.6 仿真约束的生成和实施 进行到这一步,我们已经完成了对实例进行仿真的所有条件的设置,包括对板子的设计要求分析和预布局处理。虽然从技术上讲,我们可以开始进行仿真分析并生成设计的约束,但是根据作者的工作经验,…...
AUTOSAR图解==>AUTOSAR_SWS_V2XGeoNetworking
AUTOSAR V2X GeoNetworking 模块分析 车联网地理网络协议解析与实现 目录 1. 概述2. 模块架构分析 2.1 AUTOSAR V2X GeoNetworking 在BSW架构中的位置 2.1.1 架构层次说明2.1.2 模块间关系 2.2 V2X GeoNetworking 模块内部组件结构 2.2.1 核心组件2.2.2 接口说明 3. 消息处理…...
在 Rocky Linux 上手动安装 zsh
目录 🧩 一、准备:检查是否已经安装Zsh 🛠️ 二、从源码安装 Zsh(推荐方式) 1. 下载 Zsh 源码 2. 解压源码 3. 配置安装路径(到你的 home 目录下) 4. 编译并安装 🧪 三、测试…...
Vector和list
一、Vector和list的区别——从“它们是什么”到“区别在哪儿” 1. 它们是什么? Vector:类似于一排排整齐的书架(数组),存放元素时,元素排成一条线,连续存储。可以很快通过编号(索引…...
人工智能外呼系统:重构智能交互的全维度进化
在数字化浪潮席卷全球的今天,人工智能外呼系统正以其颠覆性的技术革新,重新定义企业与客户的沟通范式。这一融合语音识别、自然语言处理与机器学习的智能系统,不仅实现了从 “机械应答” 到 “智慧交互” 的跨越,更在金融、医疗、…...
嵌入式培训之数据结构学习(三)gdb调试
一、gdb调试 (一)一般调试步骤与命令 1、gcc -g (调试版本,内含调试信息与源码;eg:gcc -g main.c linklist.c) 2、gdb a.out(调试可执行文件,eg:gdb ./a.o…...
元宇宙赛道新势力:成都芯谷产业园创新业务如何重构产业格局
成都芯谷产业园在元宇宙有啥新搞头?看看它的创新业务怎么改变行业! 成都芯谷产业园在元宇宙赛道上的创新业务,核心在于系统性构建一个开放、协同、高效的元宇宙创新生态系统,以此重构产业格局。这并非简单的企业物理聚集…...
Java 日期解析与格式化:从标准格式到自然语言解析
使用 Java 搭配 Apache Commons Lang3 和 Natty 库,实现灵活高效的日期解析与格式化。 一、背景 将不同格式的日期统一成一个格式。日期格式可能有以下几种类型: 标准格式:2024-02-28、14/05/2022、2002年5月6日非英文月份缩写:…...
【windows server脚本每天从网络盘复制到本地】
windows server脚本每天从网络盘复制到本地 调试模板 echo off :: 显示详细操作 echo echo 执行批处理文件:文件复制任务 echo :: 配置参数 set sourcePath\\network_drive\shared_folder :: 网络盘路径 set destinationPathC:\LocalBackup :: 本地保…...
GraphPad Prism简介、安装与工作界面
GraphPad Prism图表可视化与统计数据分析(视频教学版) - 商品搜索 - 京东 1.1 GraphPad Prism简介 GraphPad Prism 将科学绘图、综合曲线拟合(包括非线性回归)、易于理解的统计分析以及数据管理功能集于一身,帮助用…...
尚硅谷阳哥JVM
文章目录 第01章 JVM快速入门1、什么是JVM2、主流虚拟机有哪些?3、结构图3、执行引擎Execution Engine4、本地方法接口Native Interface5、Native Method Stack6、PC寄存器(程序计数器) 第02章 类加载器ClassLoader1、 类的加载过程2、类加载器的作用3、类加载器分类…...
spark的Standalone模式介绍
Apache Spark 的 Standalone 模式是其自带的集群管理模式,无需依赖外部资源管理器(如 YARN 或 Mesos),可快速部署和运行 Spark 集群。以下是对 Standalone 模式的详细介绍: 1. 核心组件 Master 节点 集群的主控制器…...
自营交易考试中,怎么用“黄昏之星”形态做出漂亮反转单?
在自营交易考试中,如何在复杂的市场波动中抓住关键的趋势反转点,常常决定了一笔交易的成败。尤其是在规则清晰、交易明确的交易考试中,具备对K线形态的敏感度,是不少EagleTrader交易员在晋级过程中总结出的实用经验。今天…...
【算法】版本号排序
对版本号数组进行排序,比如:[0.1.2.3,1.2.1.0,4.2.1.0,0.1.2.0] 核心思路 将版本号拆分为数字数组,逐个比较每个子版本段。具体步骤: 拆分版本号:将每个版本字符串按 . 分割成数字数…...
wordcount程序
### 在 IntelliJ IDEA 中编写和运行 Spark WordCount 程序 要使用 IntelliJ IDEA 编写并运行 Spark 的 WordCount 程序,需按照以下流程逐步完成环境配置、代码编写以及任务提交。 --- #### 1. **安装与配置 IntelliJ IDEA** 确保已正确安装 IntelliJ IDEA&#x…...
MySQL Explain 中 Type 与 Extra 字段详解
引言 在数据库性能调优过程中,理解执行计划(EXPLAIN)的输出信息至关重要。MySQL 的 EXPLAIN 命令能够帮助开发者分析查询的执行路径和效率,其中 Type 和 Extra 字段提供了关键的执行细节。Type 字段表示访问类型,反映…...
代码随想录算法训练营第60期第三十六天打卡
大家好!今天我们就会正式进入动态规划的章节,以前我们相继学完了回溯算法,贪心算法,今天的动态规划应该是相当重要同时也是相当难的章节,那我们废话不多说直接进入我们今天的章节。 第一部分 动态规划理论基础 那究竟…...
Python操作MySQL 连接加入缓存层完整方案
更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 1、整体架构设计2、MySQL 连接方案2.1 使用连接池 (推荐)2.2 使用 SQLAlchemy (ORM方案)3、缓存层实现方案3.1 Redis 缓存实现3.2 Memcached 缓存实现4、完整集成方案4.1 带缓存的数据库访问层4.2 使用装饰器实现缓存…...
PyTorch深度神经网络(前馈、卷积神经网络)
文章目录 神经网络概述神经元模型多层感知机前馈神经网络网络拓扑结构数学表示基本传播公式符号说明整体函数视角 卷积神经网络卷积神经网络发展简史第一代(1943-1980)第二代(1985-2006)第三代(2006-至今)快…...
现代垃圾收集器
大家好,我是你们的花姐。 话说java的长期支持版本已经发展到了JDK21,大部分同学对jvm中的垃圾收集器还停留在java8之前的CMS和G1。对java11之后引入的低延迟垃圾收集器shenandoah和zgc几乎是一无所知,甚至有同学是连这两个名字也没有听过呀,…...
Android学习总结之类LiveData与ViewModel关系篇
1. ViewModel 和 LiveData 的强依赖关系 ViewModel 和 LiveData 虽非强依赖,但在 Android 架构中常紧密协作,这基于它们的设计理念和优势互补: 数据与 UI 分离:ViewModel 的主要职责是存储和管理与 UI 相关的数据,而…...
GaussDB 实例 gsql 连接方式详解
GaussDB 实例 gsql 连接方式详解 GaussDB 是华为云推出的分布式关系型数据库服务,支持多种数据库引擎(如 MySQL、PostgreSQL、SQL Server 等)。gsql 是 GaussDB 提供的命令行客户端工具,用于连接和管理数据库实例。本文将详细介绍…...
智能体制作学习笔记2——情感客服
02 案例1-情感客服_哔哩哔哩_bilibili 目录 一、AI对视频内容总结 二、选择可代替视频总结的方案 三、豆包AI插件安装 四、通义 五、情感客服智能体制作 (一)注册 (二)进入工作空间 (三)创建智能体 (…...
部署GraphRAG配置Neo4j实现知识图谱可视化【踩坑经历】
文章目录 概要部署graphrag(一)使用conda创建虚拟环境(前提已经安装好anaconda)(二)部署graphrag 部署neo4jgraphrag生成的知识图谱导入neo4j踩坑经历1.graphrag执行graphrag index --root ./ragtest命令报错2.neo4j没有Relationship types 概要 在本地部署GraphRag࿰…...
跨域的几种方案
因为浏览器出于安全考虑,有同源策略。也就是说,如果协议、域名、端口有一个不同就是跨域,Ajax 请求会失败。 我们可以通过以下几种常用方法解决跨域的问题 JSONP JSONP 的原理很简单,就是利用 <script> 标签没有跨域限制…...
5 WPF中的application对象介绍
WPF Application 类提供了一系列生命周期事件,了解它们的触发顺序对于应用程序开发非常重要。以下是主要事件的触发顺序 1. 主要事件顺序 Startup - 应用程序启动时触发 这是第一个触发的事件 适合在此处初始化应用程序级资源 可以在此取消启动(通过设置e.Cancel = true) Act…...
Nexus首次亮相迪拜 TOKEN2049:以“手机 + 钱包 + 公链 + RWA”生态系统引领未来区块链基建
迪拜,2025年5月—— 全球 Web3 基础设施创新平台 Nexus,在本年度迪拜 TOKEN2049 全球峰会 上完成了其主网与全生态系统的首次国际公开亮相。此次参会不仅展示了 Nexus 的国际生态布局,更标志着其迈出了全球化战略关键一步。凭借对现实世界资产…...
C++ 套接字函数详细介绍
目录 头文件1. 套接字创建与配置2. 绑定地址与端口3. 连接建立4. 数据传输5. 套接字选项6. 地址转换7. 套接字关闭8. 其他实用函数 C 套接字函数详细介绍 套接字(Socket)是网络通信的基本端点,C中通常使用BSD套接字API进行网络编程。以下是主要的套接字相关函数及其…...
WordPress 和 GPL – 您需要了解的一切
如果您使用 WordPress,GPL 对您来说应该很重要,您也应该了解它。查看有关 WordPress 和 GPL 的最全面指南。 您可能听说过 GPL(通常被称为 WordPress 的权利法案),但很可能并不完全了解它。这是有道理的–这是一个复杂…...
机器人示教操作
机器人基础操作 **ES机器人试教操作知识** **1. 视角移动** **1.1 基础模式** - 关节轴控制:通过关节1至关节6实现单轴正反转移动 - 直线移动:通过X/Y/Z坐标轴沿指定方向直线移动 - 旋转移动:通过RX/RY/RZ坐标轴绕指定轴旋转 **1.2 步进模式…...
【python】UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xb2
报错 C:\Users\zhangbin\AppData\Local\Programs\Python\Python310\python.exe D:\XTRANS\cuda\03-graph-db\04-cmkg\pdf2zh-v1.9.9-with-assets-win64\pdf2zh\gui.py Traceback (most recent call last): File “D:\XTRANS\cuda\03-graph-db\04-cmkg\pdf2zh-v1.9.9-with-asset…...
[python] python静态方法,类方法,实例方法实现及其区别
一 静态方法 格式: 使用 staticmethmod 装饰器修饰 应用: 某个方法既不需要使用实例属性也不需要使用类属性时,就可以考虑使用静态方法 注意: 静态方法与类无关,可以被转换成函数使用,属于类本身 1.1 经典示例 创建一个与日期相关的辅助函数,这些函数不需要访问或修改类的…...
Kite AI 自动机器人部署教程
最近比较火的AI赛道,每日自动对话训练AI,赚积分 一个个用于 Kite AI 平台的自动交互机器人,支持多钱包和代理。 登记 注册链接 🌟 功能 多钱包支持(手动输入或基于文件) 代理支持(HTTP/HTTP…...
50. Pow(x, n)
50. Pow(x, n) 分治法的基本思想是将一个大问题分解成若干个相同或相似的小问题,递归地解决这些小问题,然后将这些小问题的解合并起来得到原问题的解。 class Solution:def myPow(self, x: float, n: int) -> float:# 内部定义了一个嵌套的辅助函数…...
Go 语言 sqlx 库使用:对 MySQL 增删改查
MySQL 作为目前最流行的开源关系型数据库,其 SQL 语法体系已形成行业标准,相关知识体系庞大且成熟,本文不再对 SQL 基础进行详细展开,建议尚未掌握的读者先行系统学习。本文聚焦于如何使用 Go 语言进行 MySQL 数据库操作ÿ…...
反射, 注解, 动态代理
文章目录 单元测试什么是单元测试咱们之前是如何进行单元测试的? 有啥问题 ?现在使用方法进行测试优点Junit单元测试的使用步骤删除不需要的jar包总结 反射认识反射、获取类什么是反射反射具体学什么?反射第一步:或者Class对象 获…...
继续预训练 LLM ——数据筛选的思路
GPT生成数据微调qwen-2.5多模态模型实战项目 作者:柠檬养乐多 原文地址:https://zhuanlan.zhihu.com/p/30645776656 qwen2.5-vl是阿里通义实验室推出的qwen系列最新多模态大模型,在许多指标上已经超过或接近了gpt-4o。更为方便的是࿰…...
深入解析 PostgreSQL 外部数据封装器(FDW)的 SELECT 查询执行机制
引言 PostgreSQL 中的外部数据封装器(Foreign Data Wrapper, FDW)是一种扩展,允许您像访问 PostgreSQL 数据库中的表一样,访问和操作存储在外部数据源中的数据。FDW 使 PostgreSQL 能够与多种数据存储系统(包括关系型…...
数据库系统概论|第六章:关系数据理论—课程笔记2
前言 前文我们介绍了规划化的基本概念,同时引入了关于规范化的相关定义与基本概念,低一级范式的关系模式,通过模式分解,可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。本文将围绕范式展开讨论&…...
package-lock.json能否直接删除?
package-lock.json能否直接删除? package-lock.json 生成工具:由 npm 自动生成。 触发条件:当运行 npm install 时,如果不存在 package-lock.json,npm 会创建它;如果已存在,npm 会根据它精确安…...
Ubuntu磁盘空间分析:du命令及常用组合
1、du命令的作用 du(Disk Usage)是 Ubuntu 系统中用于查看目录或文件磁盘使用情况的命令,主要用于分析磁盘空间占用。 2、语法 du [选项] [目录/文件路径]常用选项 2.1、-h 以 KB、MB、GB 等人性化可读格式(Human-readable&am…...
《数据库原理》部分习题解析1
《数据库原理》部分习题解析1 1. 名词解释 (1)关系(2)属性(3)域(4)元组(5)码(6)分量(7)关系模式 ࿰…...
汇川Easy系列PLC数据值改变功能块(随动增益改变判断)
PLC值改变事件 值改变触发功能块 PLC值改变事件 值改变触发功能块(SCL ST完整源代码)-CSDN博客文章浏览阅读1.1k次。本文介绍了在PLC中处理值改变事件的方法,包括值改变触发功能块的实现,详细讲解了FB接口定义、ST代码,并提供了在博途平台上的实现。此外,还分享了如何利用…...