学习笔记之Java篇(0729)
p 数组
| 大纲 | 知识点 |
|---|---|
| 数组的概念 | 数组的定义、四个特点 |
| 数组的常见操作 | 普通遍历、for-each遍历、java.util.Array类用法 |
| 多维数组 | 多维数组的内存结构、存储表格、Javabean和数组存储表格 |
| 常见算法 | 冒泡排序基础算法、冒泡排序优化算法、二分法查找(折半查找) |

1、数组的特点
数组是相同类型数据的有序集合。其中,每一个数据称作一个元素,每个元素可以通过一个索引」(下标)来访问它们。数组的四个基本特点:
- 度是确定的。数组一旦被创建,它的大小就是不可以改变的。
- 其元素的类型必须是相同类型,不允许出现混合类型。
- 数组类型可以是任何数据类型,包括基本类型和引用类型。
- 数组变量属于引用类型,数组也是对象,数组中的元素相当于对象的属性!
2、创建数组和初始化
数组的声明方式
type[] arr_name;//方式一
type arr_name[]; //方式二
注意事项
- 声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这是才与长度有关
- 声明一个数组的时候并没有真正被创建。
- 构造一个数组,必须指定长度
package com.Index.Array;public class CreateArray {public static void main(String[] args) {int a[];a = new int[10];for (int i = 0; i < 10; i++) {a[i] = i* 2 + 1;}for(int i = 0; i < 10; i++){System.out.println(a[i]);}Man m1 = new Man(1,11);Man m2 = new Man(2,22);Man m[] = new Man[5];m[0] = m1;m[1] = m2;System.out.println(m[0].getAge());System.out.println(m[0].getId());}
}
class Man{private int id;private int age;public Man(int id, int age) {super();this.id = id;this.age = age;}public int getId() {return id;}public int getAge() {return age;}
}

3、初始化
数组的初始化:静态初始化、动态初始化、默认初始化
3.1 静态初始化
除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。
int[] a = {1,2,3};
Man[] m = {new Man(1,1),new Man(2,2),new Man(3,3),};
3.2 动态初始化
数组定义与为数组元素分配空间并赋值的操作分开进行。
int[] a1=newint[2]://动态初始化数组,先分配空间;
a1[0] = 1://给数组元素赋值;
a1[1]=2://给数组元素赋
3.3 默认初始化
数组是对象,它的元素相当于对象的属性;每个元素也按照属性的方式被默认初始化。
4、数组的常见操作
1.遍历指的就是“通过循环遍历数组的所有元素”
2.拷贝指的是将某个数组的内容拷贝到另一个数组中
注:实质上,后面大家学容器的扩容就是“数组的拷贝”。
for-each循环
for-each专门用于读取数组或集合中所有的元素,即数组进行遍历。
package com.Index.Array;public class For_each {public static void main(String[] args) {String ss [] = {"aa","bb","ccc","ddd"};for(String temp : ss){System.out.print(temp+"\t");}}
}
//运行结果:aa bb ccc ddd
注意事项:
for-each增强for循环在遍历数组过程中不能修改数组中某元素的值。
for-each仅适用于遍历,不涉及有关索引(下标)的操作。
数组拷贝
System.arraycopy(object src,int srcos,object dest,int length)//该方法可以将src数组里的元素值赋给dest数组的元素,其中srcpos指定从src数组的第几个元素开始赋值,length参数指定将src数组的多少个元素赋给dest数组的元素。

java.util.Array类
Arrays类包含了:排序、查找、填充、打印内容等常见的数组操作。
- 使用Arrays类输出数组中的元素
package com.Index.Array;import java.util.Arrays;import static java.lang.System.arraycopy;public class ArrayCopy {public static void main(String[] args) {String ss [] = {"aa","bb","ccc","ddd"};String s [] = new String[4];System.arraycopy(ss,0,s,0 , ss.length);for(String sss:s){System.out.println(sss);}System.out.println(Arrays.toString(s));;int a[] = {23,1,54,23,66,9,0,43};System.out.println("==========================Arrays.sort========================");Arrays.sort(a);//toStringSystem.out.println(Arrays.toString(a));/*使用二分法查找*/System.out.println("==========================Arrays.binarySearch========================");System.out.println("该元素的索引时:"+Arrays.binarySearch(a,12));/*使用Arrays类对数组进行填充 ,左闭右开*/System.out.println("==========================Arrays.fill========================");Arrays.fill(a,2,4,100);System.out.println(Arrays.toString(a));}
}

菜鸟雷区
此处的Arrays.toString()方法是Arrays类的静态方法,不是前面讲的Object的toString()方法。
5、多维数组
多维数组可以看成以数组为元素的数组。以有二维、三维、甚至更多维数组,但是实际开发中用的非常少。最多到二维数组(学习容器后,我们一般使用容器,二维数组用的都很少。


6、数组存储表格数据
我们观察表格,发现每一行可以使用一个一维数组存储:
Object[] a1 = {1001,"高淇",18,"讲师","2-14"};Object[] a2 ={1002,"高小七",19,"助教","10-10"};Object[] a3 ={1003,"高小琴",20,"班主任","5-5"};
注意事项
- 此处基本数据类型“1001”,本质不是Object对象,JAVA编译器会自动把基本数据类型“自动装箱”成包装类对象。
Object[][] emps = new Object[3][ ];emps[0] = a1;emps[1] = a2;emps[2] = a3;
package com.Index.Array;import java.util.Arrays;public class ArrayTable {public static void main(String[] args) {Object a1[] = {1001,"高琪",18,"讲师","2-14"};Object a2[] = {1002,"高小其",23,"助教","10-10"};Object a3[] = {1003,"高小琴",20,"班主任","5-5"};Object emp [][] = new Object[3][];emp[0] = a1;emp[1] = a2;emp[2] = a3;System.out.println(Arrays.toString(emp[0]));System.out.println(Arrays.toString(emp[1]));System.out.println(Arrays.toString(emp[2]));System.out.println("=====================for================");for(int i=0;i < emp.length;i++){for(int j=0;j < emp[i].length;j++){System.out.print(emp[i][j] + "\t");}System.out.println();}}
}

7、Comparable接口
Comparable接口中只有一个方法:
public int compareTo (Object obj) //obj为要比较的对象
方法中,将当前对象和obj这个对象进行比较,如果大于返回1,等于返回0,小于返回-1.(此处的1也可以是正整数,-1也可以是负整数)。compareTo方法的代码也比较固定:
package com.Index.Array;import java.util.Arrays;public class compare {public static void main(String[] args) {Man2 m[] = {new Man2(23,"a"),new Man2(2,"b"),new Man2(43,"c")};System.out.println(Arrays.toString(m));Arrays.sort(m);System.out.println(Arrays.toString(m));}
}
class Man2 implements Comparable{int age;String name;int id;public Man2 (int age, String name) {this.age = age;this.name = name;}public int compareTo(Object o){Man2 man2 = (Man2)o;if(this.age < man2.age){return -1;}if(this.age > man2.age){return 1;}return 0;}public String toString (){return this.name;}public int getAge() {return age;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public void setName(String name) {this.name = name;}
}

8、冒泡算法
通过动画可视化数据结构和算法 - VisuAlgo:
冒泡排序的基础算法
冒泡排序算法重复地走访过要排序的数列一次比较两个元素如果他们的顺序错误就把他们交换过来,这样越大的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:
-
较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
package com.Index.Array;import java.util.Arrays;public class BubbleSort {public static void main(String[] args) {int a[] = {0,1,2,3,5,9,4,8,6,7};
// System.out.println("优化前:");
// bubbleSortBefor(a);System.out.println("优化后:");bubbleSort(a);}
// 优化前public static void bubbleSortBefor(int[] arr) {int tmp;for(int i = 0; i < arr.length - 1;i++){for (int j = 0; j < arr.length - i - 1; j++) {if(arr[j] > arr[j+1]){tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}System.out.println((i+1)+"趟排序:"+ Arrays.toString(arr));}}// 优化后public static void bubbleSort(int[] arr) {int tmp;for(int i = 0; i < arr.length - 1;i++){
// 定义一个布尔类型的变量,标记数组是否已达到有序状态boolean flag = true;
// 内层循环:每一趟循环都从数列的前两个元素开始进行比较,比较到无序数组的最后for (int j = 0; j < arr.length - i - 1; j++) {if(arr[j] > arr[j+1]){tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;flag = false;}}
// 根据标记量的值判断数组是否有序,如果有序,则退出;无序,则继续循环。if (flag){break;}System.out.println((i+1)+"趟排序:"+ Arrays.toString(arr));}}
}


9、二分检索(binary search)(折半检索)
package com.Index.Array;import java.util.Arrays;
import java.util.Scanner;public class BinarySort {public static void main(String[] args) {int arr[] = {43,12,54,123,54,6,34,92,541,90,10,22,33};System.out.println("输入你要查找的数字:");Scanner sc = new Scanner(System.in);int index = sc.nextInt();Arrays.sort(arr);System.out.println(Arrays.toString(arr));int Index = BinartSort(arr,index);if(Index == -1) System.out.println("无此元素");elseSystem.out.println( "索引为"+Index );}public static int BinartSort(int a[], int index){int low = 0;int height = a.length - 1;while(low <= height){int mid = (low + height)/2;if(a[mid] > index){height = mid - 1;}if(a[mid] < index){low = mid + 1;}if (a[mid] == index){return mid;}}return -1;}
}


从尚学堂老师那里找来的知识总结表,赞赞赞
相关文章:
学习笔记之Java篇(0729)
p 数组 大纲知识点数组的概念数组的定义、四个特点数组的常见操作普通遍历、for-each遍历、java.util.Array类用法多维数组多维数组的内存结构、存储表格、Javabean和数组存储表格常见算法冒泡排序基础算法、冒泡排序优化算法、二分法查找(折半查找) 1、…...
吃肉的刷题记录4-基础知识-字符串
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 leetcode.186.反转字符串中的单词 leetcode.186.反转字符串中的单词 https://leetcode.cn/problems/reverse-words-in-a-string-ii/ 给你一个字符数组 s …...
人工智能与机器学习原理精解【7】
文章目录 凸优化基础理论加权正规方程线性回归模型加权最小二乘法加权正规方程注意使用Diagonal函数使用diagm函数总结 加权最小二乘法加权最小二乘法的定义加权最小二乘法的算法加权最小二乘法的计算加权最小二乘法的原理一、基本思想二、原理详解三、总结 加权最小二乘法的例…...
ResNet学习笔记
《Deep Residual Learning for Image Recongition》:用于图像分类的深度残差学习。 ResNet(残差网络)是在2015年由微软研究院的Kaiming He等人提出的,旨在解决深度神经网络训练过程中的梯度消失、梯度爆炸问题,并允许…...
使用chainlit快速构建类似OPEN AI一样的对话网页
快速开始 创建一个文件,例如“chainlit_chat” mkdir chainlit_chat进入 chainlit_chat文件夹下,执行命令创建python 虚拟环境空间(需要提前安装好python sdk。 Chainlit 需要python>3.8。,具体操作,由于文章长度问题就不在叙述…...
【根据字符出现频率排序】python刷题记录
R2-字符串算法 包哈希表的呀。 注意 class Solution:def frequencySort(self, s: str) -> str:dictdefaultdict(list)#字符串不能直接排序,需要转换为列表["a","b","c"]slist(s)for str in s:if not dict[str]:dict[str]1else:…...
活动报名小程序
#活动报名工具# # 活动报名小程序 ## 项目简介 一款通用的活动报名工具,包含活动展示,微信支付,订单管理,分享评价等功能。 品客聚精彩,有你才精彩!不只有线下活动还可以进行线上裂变活动。 …...
unity基础问题
1.一个列表中的UI有放大效果,用什么实现? 缩放,Layout组件可以勾选使用子级缩放,这样缩放之后也能保持间距 2.UGUI事件传递机制的冒泡机制是怎样的 事件系统从内向外遍历UI层次结构,通知父级UI元素有关该事件的信息。类…...
RedHat Enterprise Linux 7 YUM源(本地/网络源)配置详解
目录 一、挂载 二、建立本地源 三、建立网络源 四、验证可行性 一、挂载 ——将光盘挂载到 /mnt 下 当/mnt中有如图内容时,即挂载成功 若挂载光驱/dev/sr0时报错:mount: no medium found on /dev/sr0 解决措施:查看该设备状态是否全部勾选…...
关于顺序表数组下标的一些关系梳理
...
VS C++ Project(项目)的工作目录设置
如果只是简单创建一个VS CProject或者MFC Project,可能很多时候,只关心将Project放在硬盘的那个位置,与Project目录相关的的其他问题,并不引人注意,我们也不是十分在意。有时我们不得不进行工作目录方面的设置…...
STM32自定义协议串口接收解析指令程序
1、在使用串口接收自定义协议指令时,需要串口解析收到的是什么指令,举例通信报文为 上位机->单片机 名称 长度 备注 帧头 1Byte 0x5A 0x5A 帧长度 1Byte 数据包的长度0x00-0xFF 数据包 命令字 1Byte 功能标识 数据 可以为空 校验 …...
STM32——GPIO(点亮LEDLED闪烁)
一、什么是GPIO? GPIO(通用输入输出接口): 1.GPIO 功能概述 GPIO 是通用输入/输出(General Purpose I/O)的简称,既能当输入口使用,又能当输出口使用。端口,就是元器件…...
VulnHub靶机入门篇--kioptrix.level 3
1.环境准备 靶机:Kioptrix Level 3(Nat模式) 下载地址:https://download.vulnhub.com/kioptrix/KVM3.rar 攻击机:kali(192.168.26.128)(Nat模式) 2.渗透测试 信息收…...
aiGPT系统源码★重大升级★AI写作/AI绘画/AI音乐/AI视频
亲爱老铁们好,又一段时间未更新内容了,我依然是爱你们的神点妹,今天点妹给大家带来一波新的福利:咱们用的aiGPT经过攻城师们近半年来夜以继日的技术升级,今天终于迎来了新版上线首秀。此次升级内容包含:首先…...
Vue Router高级用法:动态路由与导航守卫
Vue Router是Vue.js官方的路由管理器,它和Vue.js的核心深度集成,让构建单页应用变得轻而易举。 动态路由 动态路由允许你在路由路径中使用变量,这些变量可以从实际的URL中获取,并传递给对应的路由组件。 定义动态路由 在route…...
江科大/江协科技 STM32学习笔记P9-11
文章目录 OLED1、OLED硬件main.c EXTI外部中断1、中断系统2、中断执行流程图3、STM32中断4、中断地址的作用5、EXTI6、EXTI基本结构7、AFIO复用IO口8、EXTI框图或门和与门 9、旋转编码器介绍10、硬件电路 OLED 1、OLED硬件 SCL和SDA是I2C的通信引脚,需要接在单片机…...
【培训通知】成为Power BI数据分析可视化实战第一人,加入3天直播即可
Power BI数据分析可视化实战课程培训是一门旨在提升学员在数据分析与可视化领域能力的专业课程。以下是对该培训课程的详细介绍: 一、课程概述 Power BI 是一种业务分析服务,能够提供深入的见解,帮助用户实现快速、明智的决策。该课程通过实…...
24暑假算法刷题 | Day22 | LeetCode 77. 组合,216. 组合总和 III,17. 电话号码的字母组合
目录 77. 组合题目描述题解 216. 组合总和 III题目描述题解 17. 电话号码的字母组合题目描述题解 77. 组合 点此跳转题目链接 题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输…...
一篇文章告诉你对讲机为什么不能被手机取代的7个原因
在智能时代,手机几乎无处不在,涵盖了从基本通信到多媒体娱乐的一切功能。然而,即使在这种情况下,对讲机仍然没有被完全取代。这不仅仅是出于怀旧或专业需求,还有许多实质性的原因使得对讲机在特定领域和情况下仍然保持…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
