学习笔记之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个原因
在智能时代,手机几乎无处不在,涵盖了从基本通信到多媒体娱乐的一切功能。然而,即使在这种情况下,对讲机仍然没有被完全取代。这不仅仅是出于怀旧或专业需求,还有许多实质性的原因使得对讲机在特定领域和情况下仍然保持…...

LION论文阅读
一、论文主要出发点 3D目标检测的性能受限于3D卷积的局部感受野。 Transformer在3D检测领域效果很好,但由于算力限制,已有的工作在pillar内,或将voxel分组在组内进行特征交互,阻碍了他们捕捉更远程的依赖关系。 线性RNN算子的计…...

在Android上实现汉字笔顺动画效果——HanZiWriter
序,万般皆是命,半点不由人。 Hanzi Writer 是 javascript 免费开源库,根据汉字书写时按照笔画顺序的特征,可以播放正确笔画顺序的描边动画和练习测试。支持简体字和繁体字。可以让全球用户能够通过手绘模仿的方式来学习和练习书写…...

黑马头条vue2.0项目实战(一)——项目初始化
1. 图标素材(iconfont简介) 制作字体图标的工具有很多,推荐使用:iconfont-阿里巴巴矢量图标库。 注册账户 创建项目 可以根据项目自定义 class 前缀 上传图标到项目 生成链接,复制 css 代码,在项目中使用…...

Unity Shader动画:用代码绘制动态视觉效果
在Unity中,Shader是运行在GPU上的小程序,用于控制顶点和像素的渲染过程。通过编写自定义Shader,开发者可以创造出各种令人惊叹的动画效果,从简单的颜色变化到复杂的流体模拟。本文将探讨如何使用Unity Shader来实现动画效果。 Sh…...

智税集成2.0生成凭证
:::info 💡 整体业务流程 从A9服务器中取数,生成列表数据,写入到对方oracle数据库中。 ::: 项目关键点 1.连接数据库 左连接连接本地SQLserver数据库、右连接要链接A9开票服务器的数据库然后设想用SQLserver 自带的外部连接来连接oracle数据…...

B4005 [GESP202406 四级] 黑白方块 【暴力枚举】【前缀和】
#include<bits/stdc.h> using namespace std; int n,m,ans,tmp; char mp[20][20]; int cheak(int a,int b,int c,int d){//a<c b<dint cnt0;//枚举矩阵中的每个点 for(int ia;i<c;i)for(int jb;j<d;j)if(mp[i][j]1) cnt;//统计黑格的个数 return 2*cnt(c-a1…...

深度学习趋同性的量化探索:以多模态学习与联合嵌入为例
深度学习趋同性的量化探索:以多模态学习与联合嵌入为例 参考文献 据说是2024年最好的人工智能论文,是否有划时代的意义? [2405.07987] The Platonic Representation Hypothesis (arxiv.org) arxiv.org/abs/2405.07987 趋同性的量化表达 …...

决策树与随机森林:比较与应用场景分析
决策树与随机森林:比较与应用场景分析 引言 决策树和随机森林是机器学习中广泛使用的两种算法,因其简单性和强大的功能而被广泛采用。决策树是一种树形结构的决策模型,易于理解和解释。随机森林则是通过集成多棵决策树来提高预测性能的模型…...

C#用Aspose.Cells导出Excel,.NET导出Excel
ASP.NET MVC 控制器里面Action处理,下载文件,输出文件流 public async Task<ActionResult> ExportNewsAuthorFee(string deptId, DateTime? startDate, DateTime? endDate){if (startDate null){startDate DateTime.Parse(DateTime.Now.Year …...

天猫番茄品类TOP1,复购率超40%,「一颗大」如何策划极致产品力?
桔子要买什么品牌?桃子买什么品牌?土豆买什么品牌?过去人们购买农产品几乎没有品牌意识。但近年来可能某些人买猕猴桃时会考虑佳沛,这是一个在全球达到30%猕猴桃市场的新西兰品牌。与此类似,一个国产品牌「一颗大™」正…...