五、数组——Java基础篇
五、数组
1、数组元素的遍历
1.1数组的遍历:将数组内的元素展现出来
1、普通for遍历:根据下表获取数组内的元素
2、增强for遍历:
for(数据元素类型 变量名:数组名){
变量名:数组内的每一个值
}
区别:
(1)、需要下标:就是用普通for,不需要下标使用增强for
(2)、增强遍历的底层原理就是普通for
public class Travesal1 {public static void main(String[] args) {String[] sArr={"安其拉","妲己","吕布"};//增强for遍历for (String e : sArr) {System.out.println("e = " + e);}//普通for遍历for(int index=0;index<sArr.length;index++){String ele=sArr[index];System.out.println("ele = " + ele);}}
}class Travesal02{public static void main(String[] args) {int[] arr={30,20,40,50,90,80};//增强for遍历for (int i : arr) {System.out.println("增强for= " + i+"");}//普通for遍历for (int e = 0; e < arr.length; e++) {System.out.println("普通for =" + arr[e]);}}
}
1.2 定义一个整形数组
int[] arr={66,77,88,99,11,22,33};
获取总和?
public class TrversalExer2 {public static void main(String[] args) {int[] arr={66,77,88,99,11,22,33};//定义变量记录总和int sum=0;//增强遍历for(int e:arr){sum+=e;}//普通遍历
// for (int i = 0; i < arr.length; i++) {
// sum+=arr[i];
// }System.out.println("总和为:" + sum);}
}
1.3 定义一个整型数组,获取最大值和标出下标?
int[] arr={66,77,88,99,11,22,33};
public class TrversalExer_1{public static void main(String[] args) {//1、定义数组int[] arr={66,77,88,99,11,22,33};//todo定义变量 记录最大值,下标int maxNum=0;int index=0;//2、开始遍历for (int i = 0; i < arr.length; i++) {//数组中的每一个元素与假设的”int maxNum=1;“进行比较,如果数组元素>假设值,则元素是最大值if(arr[i]>maxNum){maxNum=arr[i];//记录最大值下标index=i;}}//3、展示数组System.out.println("最大值是:" + maxNum+",下标是"+index);}
}
class TrversalExer_2{public static void main(String[] args) {//1.定义变量int[] arr={66,77,88,99,11,22,33};//2.定义变量记录最小值下标int minNum=arr[0];int index=0;for (int i = 0; i < arr.length; i++) {if(arr[i]<minNum){minNum=arr[i];index=1;}}System.out.println("最小值三十:" + minNum+",下标是"+index);}
}
2、Java虚拟机的内存划分
为了提高运算效率,就对空间进行了不同的区域划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
程序运行时才会在虚拟机上开辟内存,内存区域划分的目的,提高运算效率
1 .栈:存储着方法内的局部变量信息。
2 .堆:对象。new的对象,包括数组,都存在堆中。
3 .本地方法栈:Java并不是万能的,有些功能时无法实现的额,需要救助与其他语言来实现,通过调用本地方法调用其他语言。
4 .方法区(元空间):静态信息,常量信息,类中的描述信息。
5 .程序计数器:存储计算机下一条指令的地址。
2.1 怎么画栈堆图
public class JVMMemory3 {public static void main(String[] args) {int m=10;int[] arr=new int[3];arr[0]=99;arr[2]=66;System.out.println("arr[0] = " + arr[0]);System.out.println("arr[1] = " + arr[1]);System.out.println("arr[3] = " + arr[3]);}
}
2.2 输出英文星期几
用一个数组,保存星期一到星期天的7个英语单词,从键盘输入1-7,显示对应的单词
{“Monday”,“Tuesday”,“Wednesday”,“Thursday”,“Friday”,“Saturday”,“Sunday”}
public class ArrayExer4 {public static void main(String[] args) {/***///1、准备数组String[] arr={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};//2、创建键盘输入对象Scanner in=new Scanner(System.in);//3、接受数组System.out.println("请输入数字1-7:");int month=in.nextInt();//4、展示单词String mesage = arr[month - 1];System.out.println("mesage = " + mesage);//5、关闭资源in.close();}
}
2.3 从键盘读入学生成绩,找出最高分,并输出学生成绩等级
- 成绩>=最高分-10 等级为’A’- 成绩>=最高分-20 等级为’B’- 成绩>=最高分-30 等级为’C’- 其余 等级为’D’提示:先读入学生人数,根据人数创建int数组,存放学生成绩。请您输入第1个学生的成绩90请您输入第2个学生的成绩80请您输入第3个学生的成绩70请您输入第4个学生的成绩60请您输入第5个学生的成绩80
class ArrayExery_2{public static void main(String[] args) {//1、创建键盘输入对象Scanner in=new Scanner(System.in);//2、获取学生的个数System.out.println("请输入学生的个数:");int count=in.nextInt();//3、创建数组,存储学生的成绩int[] arr=new int[count];//4、遍历数组、存储成绩for (int i = 0; i < arr.length; i++) {System.out.println("请您输入第"+(i+1)+"个学生的成绩");int soure=in.nextInt();arr[i]=soure;}//5、过去最高成绩int maxsoure=arr[0];for (int i : arr) {if(i>maxsoure){maxsoure=i;}}System.out.println("maxsoure = " + maxsoure);//6、判断学生的等级for (int i = 0; i < arr.length; i++) {int score = arr[i];if(score>=maxsoure-10){System.out.println("第"+(i+1)+"个学生成绩等级是:A");}else if(score>=maxsoure-20){System.out.println("第"+(i+1)+"个学生成绩等级是:A");}else if(score>=maxsoure-30){System.out.println("第"+(i+1)+"个学生成绩等级是:A");}else{System.out.println("第"+(i+1)+"个学生成绩等级是:A");}}//7、关闭资源in.close();}
}
3、冒泡排序
3.1 冒泡排序的准备
public class BubbleSort5 {public static void main(String[] args) {int m=20;int n=10;System.out.println("交换前:m = " + m+",n="+n);int temp=m;m=n;n=temp;System.out.println("交换后:m = " + m+",n="+n);int[] arr={77,66,55,44,33,22,11};System.out.println("arr = " + arr);//地址值:[I@5b480cf9//Arrays.toString(arr)+soutv,展示arr中的值System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));}}
3.2 冒泡排序的基础写法
class BubbleSort_1{public static void main(String[] args) {int[] arr={77,66,55,44,33,22,11};System.out.println("排序前 = " + Arrays.toString(arr));//todo-1:数组元素时7个,最多6次有序for (int i = 0; i < arr.length-1; i++) {//todo进行每一次排序,-1:为了防止下标越界for(int j=0;j<arr.length-1;j++){//如果前一个>后一个,,两个数进行交换if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}System.out.println("排序中 = " + Arrays.toString(arr));}System.out.println("排序后 = " + Arrays.toString(arr));
}
}
3.3 冒泡排序的优化
class BubbleSort_2{public static void main(String[] args) {int[] arr={77,66,55,44,33,22,11};System.out.println("排序前 = " + Arrays.toString(arr));//todo-1:数组元素时7个,最多6次有序for (int i = 0; i < arr.length-1; i++) {//假设此次排序已经有序,若是假设失败boolean flag=true;//todo进行每一次排序,-1:为了防止下标越界// -i:为了专注于无序部分即可,不需要对有序部分排序for(int j=0;j<arr.length-1-i;j++){//如果前一个>后一个,,两个数进行交换if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;//如果有前一个>后一个则假设失败,数组无序flag=false;}}if(flag){break;}System.out.println("排序中 = " + Arrays.toString(arr));}System.out.println("排序后 = " + Arrays.toString(arr));
}
3.4 定义一个数组存储学生的成绩求总分平均分
3.5 定义一个数字 对数组元素进行反转
10 20 30 40 50 60 70
70 60 50 40 30 20 10
3.6 定义一个数组 键盘输入一个数字 判断此数字是否在数组内
请您输入一个数
55
有此元素 55 下标是 3
请您输入一个数
99
查无此元素 99
import java.util.Scanner;
public class ArrayText {public static void main(String[] args) {//1、创建键盘输入对象Scanner in=new Scanner(System.in);//2、获取成绩System.out.println("请问您要存储几个学生的成绩");int count=in.nextInt();//3、创建数组int[] arr=new int[count];//4、遍历数组for (int i = 0; i < arr.length; i++) {System.out.println("请您输入第"+(i+1)+"个学生的成绩");arr[i]=in.nextInt();}//4.1获取最大值、最小值、总成绩int maxNum=arr[0] , minNum=arr[0],sum=0;for (int e : arr) {if(e>maxNum){maxNum=e;}if(e<minNum){minNum=e;}sum+=e;}//5、展示总成绩,平均分,System.out.println("总成绩 = " + sum+",最高成绩="+maxNum+",最低成绩="+minNum+",平均分"+sum/arr.length);//6、关闭资源in.close();}
}
4、反转
4.1 反转1(开辟了新内存进行反转)
public class Reverse7 {public static void main(String[] args) {int[] arr={11,22,33,44,55,66,77};//反转前System.out.println("反转前 = " + Arrays.toString(arr));//反转//1、创建一个新数据 长度为7int[] newArr=new int[arr.length];//2、将旧数据内容 反转后存储到新数组内int index=0;for(int i=arr.length-1;i>=0;i--){newArr[index]=arr[i];//更改index下标index++;}//3、将新数组地址赋值给旧数组arr=newArr;//反转后System.out.println("反转后 = " + Arrays.toString(arr));}
}
4.2 反转2(就在原来的内存上进行反转)
class Reverse7_1{public static void main(String[] args) {int[] arr={11,22,33,44,55,66,77};//反转前System.out.println("反转前 = " + Arrays.toString(arr));//反转for(int i=0;i<arr.length/2;i++){int temp=arr[i];arr[i]=arr[arr.length-1-i];arr[arr.length-1-i]=temp;}//反转后System.out.println("反转后 = " + Arrays.toString(arr));}
}
4.3 反转3
LIndex=0左边从0开始,RIndex=arr.length-1右边往左开始,,左边<右边,,左边一直加,右边一直减
class Reverse7_3{public static void main(String[] args) {int[] arr={11,22,33,44,55,66,77};//反转前System.out.println("反转前 = " + Arrays.toString(arr));//反转//LIndex=0左边从0开始,RIndex=arr.length-1右边往左开始,,左边<右边,,左边一直加,右边一直减for(int LIndex=0,RIndex=arr.length-1;LIndex<RIndex;LIndex++,RIndex--){int temp=arr[LIndex];arr[LIndex]=arr[RIndex];arr[RIndex]=temp;}//反转后System.out.println("反转后 = " + Arrays.toString(arr));}
}
4.5 数组元素的扩容
4.6找出所有的偶数并求和
public class EvenTest8 {public static void main(String[] args) {int[] arr={10,11,12,13,14,15,16,17};//找出所有的偶数并求和int sum=0;for (int e : arr) {if(e%2==0){sum+=e;}}System.out.println("sum = " + sum);}
}
4.7 数组扩容(数组已经满了,再添加元素)
class EvenTest8_1{public static void main(String[] args) {String[] arr={"张三","王五","李四"};//1.创建一个新数组String[] newArr = new String[arr.length << 1];//2.将旧数组赋值为新数组for (int i = 0; i < arr.length; i++) {newArr[i]=arr[i];}//3.将新数组地址赋值给旧数组arr = newArr;arr[3]="安其拉";System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));}
}
5、总结
5.1数组元素的遍历
(1)普通for(值+fori)
(2)增强for(值+for):底层是普通for
5.2 数组元素的内存图
(1)单个数组
(2)多个数组
(3)两个数组指向同一个地址
5.3数组的小算法
(1)顺序查找
(2)冒泡排序
(3)特殊值
(4)反转
(5)数组的扩容
6、二维数据的初始
7、二维数组的静态初始化
静态初始化:编译时确定数组的长度以及内容
形式1:
数据类型[][] 数据名={{},{}};
形式2:
数据类型[][] 数组名=new 数据类型[][]{{“李白”,“李三”},{“安其拉”,“哈哈”,“喜喜”}};
public class DoublearrayTest_1 {public static void main(String[] args) {System.out.println("---------静态数组------------");int[][] arr = {{20, 40, 60}, {11, 22, 33, 44}, {55, 66, 77, 88, 99},{100,200}};System.out.println("arr.length = " + arr.length);//4System.out.println("arr[0] = " + arr[0]);//第一个一维数组中的第三个元素System.out.println("arr[0][2] = " + arr[0][2]); //60System.out.println("arr[2][4] = " + arr[2][4]); //99System.out.println("arr[3].length = " + arr[3].length);//2String[][] arr1;arr1=new String[][]{{"李白","李三"},{"安其拉","哈哈","喜喜"}};System.out.println("arr1.length = " + arr1.length);//2System.out.println("arr1[1][2] = " + arr1[1][2]); //喜喜}
}
8、二维数组的动态初始化
动态初始化:编译时确定数组的长度和默认值
形式1:规则矩形
数据类型[][] 数组名=new 数据类型[ 数组1][ 数值2];
数值1:一位数组的的个数
数组2:一维数组内元素的个数
class DoublearrayTest1_2 {public static void main(String[] args) {//数据类型[][] 数组名=new 数据类型[数组1][数值2];int[][] arr = new int[5][6];System.out.println("arr.length = " + arr.length);System.out.println("arr[0].length = " + arr[0].length);System.out.println("arr[4].length = " + arr[4].length);System.out.println("arr[0][0] = " + arr[0][0]);}
}
形式2:非规则矩形
数据类型[][] 数组名=new 数据类型[数组1][][ ];
数值1:一位数组的的个数
class DoublearrayTest1_2 {public static void main(String[] args) {//数据类型[][] 数组名=new 数据类型[数组1][];int[][] iArr = new int[3][];System.out.println("iArr[0] = " + iArr[0]);iArr[0] = new int[6];iArr[0][0] = 66;iArr[1] = new int[]{33,55,77};}
}
8、二维数组的遍历
public class Taversal_2 {public static void main(String[] args) {String[][] arr = {{"侵权","王五"},{"嗯嗯","让人","头疼"},{"右移","哈哈","更改","得到"}};
//只遍历第一个一维数组,其他的依次类推// for(int i=0;i<arr[0].length;i++){
// System.out.println(arr[0][i]+"\t");
// }for (String[] eleArr : arr) {//对一堆数组再次遍历for (String e : eleArr) {System.out.println(e+"\t");}System.out.println();}}
}
class Taversal2_1{public static void main(String[] args) {int[][] arr={{11,22},{33,44,55}};for (int[] eleArr : arr) {for (int e : eleArr) {System.out.println(e+"\t");}}}
}
9、二维数组的内存图
二位数组的元素是一维数组,一维数组不是基本类型数据,不是基本那就是引用,引用数据类型默认值null。
10、二维数组求最值
public class BoubleArrayExer_3 {public static void main(String[] args) {//获取最大值/最小值int[][] arr={{111,222,333},{10,20,30},{-1,-2,99}};//定义变量记录最大值和最小值int maxNum=arr[0][0];int minNum=arr[0][0];//遍历数据,获取每一个值for (int[] eleArr : arr) {for (int e : eleArr) {//如果数组元素>假设得最大值 则说明数组元素是最大值if(e>maxNum){maxNum=e;}//如果数组元素<假设得最小值 则说明数组元素是最小值if(e<minNum){minNum=e;}}}System.out.println("最大值 = " + maxNum+",最小值 = " + minNum);}
}
键盘输入一个正整数 ,动态 创建长度为输入的数得二维数组,遍历此二维数组再控制台。
1
22
333
4444
55555
class BoubleArrayExer3_1{public static void main(String[] args) {//1、创建键盘输入对象Scanner in=new Scanner(System.in);//2、获取数组得长度System.out.println("请您输入数组的长度:");int length = in.nextInt();//3、创建二维数组int[][] arr=new int[length][];//4、遍历数组给元素赋值//4.1遍历二维数据获取每一个一维数组下标for (int i = 0; i < arr.length; i++) {//4.2给一位数组开辟空间(初始化)arr[i] = new int[i + 1];//4.3遍历一维数组,给每一个元素赋值for (int j = 0; j < arr[i].length; j++) {arr[i][j]=i+1;}}
// System.out.println("arr[0] = " + arr[0]);
// arr[0]=new int[0+1];
// arr[0][0]=0+1;
// arr[1]=new int[1+1];
// arr[1][0]=1+1;
// arr[1][1]=1+1;
// arr[2]=new int[2+1];
// arr[2][0]=2+1;
// arr[2][1]=2+1;
// arr[2][2]=2+1;//5、展示数据for (int[] eleArr : arr) {for (int e : eleArr) {System.out.print(e);}System.out.println();}//6、关闭资源in.close();}
}
相关文章:

五、数组——Java基础篇
五、数组 1、数组元素的遍历 1.1数组的遍历:将数组内的元素展现出来 1、普通for遍历:根据下表获取数组内的元素 2、增强for遍历: for(数据元素类型 变量名:数组名){ 变量名:数组内的每一个值…...
如何用golang写一个自己的后端框架
如果你想要不使用任何现有的后端框架,完全从头开始创建一个后端框架,你需要实现Web服务器的基本组件,比如路由器、请求处理、中间件支持等。以下是一个简单的指南,用于创建一个基本的、不使用任何外部框架的Go后端框架。 步骤 1: 设置工作环境 确保你已经安装了Go语言环境…...
linux 如何给服务器批量做免密,如何批量挂在磁盘
前提条件 所有机器网络互通,且已做了免密登录 linux服务器批量做免密脚本如下 #!/bin/bash # 定义服务器列表文件 SERVERS_FILE"host" # 定义生成的密钥的存储目录 KEY_DIR"/root/.ssh" # 检查是否输入了文件路径 if [ $# -ne 1 ]; then …...
Android Activity的生命周期详解
在Android开发中,了解Activity的生命周期是非常重要的,它决定了Activity在不同状态下的行为和处理逻辑。Android中的Activity生命周期包括多个方法,每个方法都代表了Activity在特定状态下的行为。下面我们来逐一介绍这些方法及其对应的生命周…...
python学习笔记-内置类型
Python内置类型是Python编程语言中自带的基本数据类型,它们用于存储和处理数据。其中包括数字、序列、映射、类、实例和异常等主要类型。 在这些内置类型中,有一些是可变的,它们具有修改自身内容的能力,比如添加、移除或重排成员…...

校园微社区微信小程序源码/二手交易/兼职交友微信小程序源码
云开发校园微社区微信小程序开源源码,这是一款云开发校园微社区-二手交易_兼职_交友_项目微信小程序开源源码,可以给你提供快捷方便的校园生活,有很多有趣实用的板块和功能,如:闲置交易、表白交友、疑问互答、任务兼职…...
如何在 Angular 中使用 NgTemplateOutlet 创建可重用组件
简介 单一职责原则是指应用程序的各个部分应该只有一个目的。遵循这个原则可以使您的 Angular 应用程序更容易测试和开发。 在 Angular 中,使用 NgTemplateOutlet 而不是创建特定组件,可以使组件在不修改组件本身的情况下轻松修改为各种用例。 在本文…...

改进的yolo交通标志tt100k数据集目标检测(代码+原理+毕设可用)
YOLO TT100K: 基于YOLO训练的交通标志检测模型 在原始代码基础上: 修改数据加载类,支持CoCo格式(使用cocoapi);修改数据增强;validation增加mAP计算;修改anchor; 注: 实验开启weig…...

nginx 日志,压缩,https功能介绍
一, 自定义访问日志 (一)日志位置存放 1,格式 2, 级别 level: debug, info, notice, warn, error, crit, alert, emerg 3,示例 服务机定义 错误日志存放位置 客户机错误访问 查看错误日志 4ÿ…...
代码随想录三刷day17
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣144. 二叉树的前序遍历二、力扣145. 二叉树的后序遍历三、力扣94. 二叉树的中序遍历四、力扣144. 二叉树的前序遍历无、力扣145. 二叉树的后序遍历六、…...
postcss-px-to-viewport include属性
包含include配置的(github):npm i https://github.com/evrone/postcss-px-to-viewport -S 包含include配置的(npm):npm i postcss-px-to-viewport-8-with-include -S 不包含包include配置的(npm):npm i postcss-px-to-viewport 看了一下这篇文…...

C++设计模式——抽象工厂模式
文章目录 抽象工厂模式的主要组成部分抽象工厂模式的一个典型例子抽象工厂模式用于其他场景抽象工厂模式与其他设计模式结合使用 C 中的抽象工厂模式是一种创建型设计模式,它主要用于处理对象家族的创建,这些对象之间可能存在一定的关联关系或属于相同的…...

Windows安装VNC连接工具并结合cpolar实现远程内网Ubuntu系统桌面
文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…...
Vue3 Hooks函数使用及封装思想
一、什么是Hooks函数? 想象一下,你在做饭,有一些调料你经常会用到,比如盐、酱油和辣椒。每次做饭时,你都会从柜子里拿出这些调料。如果你每次用完都把它们随便放在厨房的某个角落,下次做饭时就可能找不到它…...

YOLOv8改进涨点,添加GSConv+Slim Neck,有效提升目标检测效果,代码改进(超详细)
目录 摘要 主要想法 GSConv GSConv代码实现 slim-neck slim-neck代码实现 yaml文件 完整代码分享 总结 摘要 目标检测是计算机视觉中重要的下游任务。对于车载边缘计算平台来说,巨大的模型很难达到实时检测的要求。而且,由大量深度可分离卷积层构…...

华为s5720s-28p-power-li-ac堆叠配置
叠物理约束: • 连线推荐示意图选用产品子系列中固定的一款设备做示例,与选择产品时指定型号的外观可能不同。示意图主要用于让用户了解相同子系列设备可以用作堆叠的端口的位置,以及使用不同的连线方式时如何连接设备上的端口。因此…...
c# aes加密解密私钥公钥通钥
using System.Security.Cryptography; using System.Text; namespace EncryptTest { internal class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); string 密 EncryptAESBASE64("你…...

上拉电阻与下拉电阻、电容的作用
上拉电阻与下拉电阻 在单片机电路中,上拉电阻和下拉电阻都是常见的电路元件,它们在数字电路设计中扮演着重要的角色。它们的作用如下: 1. **上拉电阻**: - **作用**:当一个引脚没有外部信号时,上拉电阻…...

《Spring Security 简易速速上手小册》第1章 Spring Security 概述(2024 最新版)
文章目录 1.1 Spring Security 的重要性1.1.1 基础知识详解1.1.2 主要案例:用户认证与授权1.1.3 拓展案例 1:OAuth2 社交登录1.1.4 拓展案例 2:JWT 认证 1.2 Spring Security 的核心特性1.2.1 基础知识详解1.2.2 主要案例:基于角色…...
vue页面菜单权限问题解决
带锚点的url,#后面部分后端获取不到. vue的页面是带有#的路由,#后端服务获取不到,只在浏览器端有用. URL 中的哈希符号 (#) 被用来作为网页中的 锚点 使用,锚点的含义就是页面中的某个特定的位置,这个位置可以被快速找到,很类似于在该位置抛…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...