【java】数组(超详细总结)
目录
一.一维数组的定义
1.创建数组
2.初始化数组
二.数组的使用
1.访问数组
2.遍历数组
3.修改数据内容
三.有关数组方法的使用
1.toString
2. copyOf
四.查找数组中的元素
1.顺序查找
2.二分查找binarySearch
五.数组排序
1.冒泡排序
2.排序方法sort
六.数组逆置
七.二维数组的定义
八.二维数组的打印
一.一维数组的定义
1.创建数组
数组定义有三种方法:
int[] array1 = new int[10];//前面的int[]为数组的类型,后面的int[10]为其能够存放的大小,array1为其数组名称
int[] array2 = {1,2,3,4,5};
int[] array3 = new int[]{1,2,3,4,5};
2.初始化数组
初始化数组有动态初始化和静态初始化两种
动态初始化:在创建数组时,只定义数组中元素的个数,并未给里面的元素进行赋值
例如:
int [] array = new int [ 10 ];
静态初始化:在创建数组时不定义数据元素个数,而直接将数组里的数据内容进行赋值,编译器会自己判定数组有几个元素, 后面的数据必须与前面定义的数据类型一致
例如:
int[] array1 = { 0,1,2,3,4,5,6,7,8,9};
初始化能分为两步,分步的第二步中new int[]不能省略
int [] array ;
array = new int []{ 10 , 20 , 30 };
当数组中的元素为动态初始化时,会有对应的默认值
二.数组的使用
1.访问数组
通过数组的下标进行访问,数组在内存中是一块连续的内存空间
public class Test {public static void main(String[] args) {int[] array = {1,2,3,4,5};System.out.println(array[3]);}
}
数组的下标是从0开始的,所以数组用下标访问最大能到数组长度-1
public class Test {public static void main(String[] args) {int[] array = {1,2,3,4,5};System.out.println(array[5]);}
}
超过会报异常
2.遍历数组
数组有3种打印方式
(1)for循环打印数组
public class Test {public static void main(String[] args) {int[] array = {1,2,3,4,5};for (int i = 0; i < array.length; i++) {System.out.print(array[i]+" ");}}
}
(2)增强for(foreach)打印数组
public class Test {public static void main(String[] args) {int[] array = {1,2,3,4,5};for (int x:array) {System.out.print(x+" ");}}
}
(3)toString打印数组
import java.util.Arrays;public class Test {public static void main(String[] args) {int[] array = {1,2,3,4,5};System.out.println(Arrays.toString(array));//使用toString方法需要导包,类似C语言中的头文件}
}
3.修改数据内容
1.直接传变量
public class Test {public static void func(int x){x = 10;System.out.println("x:"+x);}public static void main(String[] args) {int num = 0;func(num);System.out.println("num:"+num);}
}
num的值没有被修改为10,因为方法传参的时候传的是形参,形参相当于是实参的一份临时拷贝,形参的修改不会影响到实参(相当于调用方法时创建的栈帧里有一个变量的值为0,然后被修改为10,方法调用结束,创建的栈帧销毁,并无影响)
2.传的是数组
import java.util.Arrays;public class Test {public static void func(int[] array){array[0] = 10;}public static void main(String[] args) {int[] array = {1,2,3};func(array);System.out.println(Arrays.toString(array));}
}
3.传的数组返回的也是数组
import java.util.Arrays;public class Test {public static int[] func(int[] array){array[0] = 10;array[2] = 30;return array;}public static void main(String[] args) {int[] array = {1,2,3};func(array);System.out.println(Arrays.toString(array));}
}
三.有关数组方法的使用
1.toString
toString方法的作用是将数组的数据变成字符串类型数据
import java.util.Arrays;public class Test {public static void main(String[] args) {int[] array = {1,2,3,4,5};//定义一个数组String arrays = Arrays.toString(array);//用字符串类型接受方法的返回值System.out.println(arrays);}
}
2.模拟实现toString
public class Test {public static String toString(int[] array){//返回类型为字符串类型String array1 = "[";//定义一个字符串类型数据for (int i = 0; i < array.length; i++) {array1+=array[i];if(i!= array.length-1){array1+=",";}}array1+="]";return array1;}public static void main(String[] args) {int[] array = {1,2,3,4,5};//定义一个数组String arrays = toString(array);//用字符串类型接收方法的返回值System.out.println(arrays);}
}
3. copyOf
第一个参数original
- 要复制的数组
第二个参数newLength
- 要返回的副本的长度
import java.util.Arrays;public class Test {public static void main(String[] args) {int[] array = {1,2,3,4,5};int[] newArray = new int[array.length];//新数组newArray = Arrays.copyOf(array,array.length);System.out.println(Arrays.toString(newArray));}
}
4.模拟实现copyOf
import java.util.Arrays;public class Test {public static int[] copyOf(int[] array,int length){int[] newArray = new int[array.length];for (int i = 0; i < array.length; i++) {//循环赋值newArray[i] = array[i];}return newArray;}public static void main(String[] args) {int[] array = {1,2,3,4,5};int[] newArray = copyOf(array, array.length);newArray[2] = 30;//将拷贝好的数组的第3个元素赋值为30,观察该改变是否对原数组是否有影响System.out.println("array:"+Arrays.toString(array));System.out.println("newArray:"+Arrays.toString(newArray));}
}
四.查找数组中的元素
1.顺序查找
public class Test {public static int find(int[] array,int k){for (int i = 0; i < array.length; i++) {if(k == array[i]){return i;//找到了就返回下标}}return -1;//找不到返回-1}public static void main(String[] args) {int[] array = {1,2,3,0,7,8,9,4,5,6};int ret = find(array,4);System.out.println(ret);}
}
2.二分查找binarySearch
二分查找必须是有序数组
import java.util.Arrays;public class Test {public static void main(String[] args) {int[] array = {1,2,3,4,5,6,7,8,9,10};int ret = Arrays.binarySearch(array,4);System.out.println(ret);}
}
模拟实现binarySearch
a
- 要搜索的数组
key
- 要搜索的值
public class Test {public static int binarySearch(int[] array,int k){int left = 0;int right = array.length-1;while(left<=right){int mid = (left+right)/2;if(array[mid]>k){//查找范围左移right = mid-1;}else if(array[mid]<k){//查找范围右移left = mid+1;}else{return mid;}}return -1;}public static void main(String[] args) {int[] array = {1,2,3,4,5,6,7,8,9,10};int ret = binarySearch(array,4);System.out.println(ret);}
五.数组排序
1.冒泡排序
import java.util.Arrays;public class Test {public static void bubbleSort(int[] array){for (int i = 0; i < array.length-1; i++) {boolean flag = true;for (int j = 0; j < array.length-1-i; j++) {if(array[j]>array[j+1]){int tmp = array[j];array[j] = array[j+1];array[j+1] = tmp;flag = false;}}if(flag == true){//已经有序break;}}}public static void main(String[] args) {int[] array = {1,2,3,6,5,0,4,8,7,9};bubbleSort(array);System.out.println(Arrays.toString(array));}
2.排序方法sort
import java.util.Arrays;public class Test {public static void main(String[] args) {int[] array = {1,2,3,6,5,0,4,8,7,9};Arrays.sort(array);System.out.println(Arrays.toString(array));}
}
六.数组逆置
import java.util.Arrays;public class Test {public static void reverse(int[] array){int head = 0;int tail = array.length-1;while(head<tail){int tmp = array[head];array[head] = array[tail];array[tail] = tmp;head++;//后移tail--;//前移}}public static void main(String[] args) {int[] array = {1,2,3,4,5,6};reverse(array);System.out.println(Arrays.toString(array));}
七.二维数组的定义
二维数组同样有三种定义方式
public class Test {public static void main(String[] args) {int[][] array1 = {{1,2,3},{4,5,6}};int[][] array2 = new int[2][3];int[][] array3 = new int[][]{{1,2,3},{4,5,6}};}
八.二维数组的打印
Arrays包里面的toString方法是将数组中的元素转换为字符串,用2个toString方法来打印二维数组时,第一个toString已经将数组转换为字符串,第二个toString是不能接收字符串的,所以不能用toString来打印二维数组
应用deepToString来打印
import java.util.Arrays;public class Test {public static void main(String[] args) {int[][] array = {{1,2,3},{4,5,6}};System.out.println(Arrays.deepToString(array));}
相关文章:

【java】数组(超详细总结)
目录 一.一维数组的定义 1.创建数组 2.初始化数组 二.数组的使用 1.访问数组 2.遍历数组 3.修改数据内容 三.有关数组方法的使用 1.toString 2. copyOf 四.查找数组中的元素 1.顺序查找 2.二分查找binarySearch 五.数组排序 1.冒泡排序 2.排序方法sort 六.数组逆置…...
@KafkaListener注解
KafkaListener(topics "${xxxx}", containerFactory "xxx") public void consume(String message) {service.save(xx); }在 Spring Boot 中,使用 KafkaListener 注解消费 Kafka 消息时,如果 service.save(cleanWikiSource) 抛出异…...

2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025)
2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025) 2025 International Conference on Advances in Computer Vision Research and Applications 重要信息 2025年3月28-30日 南京 一轮截稿日期:2024年11月30日 EI检索稳定 早投稿,早审稿&a…...

第二代GPT-SoVITS V2:让声音克隆变得简单
随着人工智能技术的飞速发展,AI声音克隆已经成为一种趋势,广泛应用于各个领域。为了满足更多用户的需求,第二代GPT-SoVITS V2应运而生,它由RVC变声器创始人“花儿不哭”与AI音色转换技术Sovits开发者Rcell联合开发,是一…...
基于x86_64汇编语言简单教程6: 变量,常量,与运算
目录 变量 为未初始化的数据分配存储空间 多重初始化 常量 equ指令 %assign 指令 %define指令 算数指令 inc 自增指令 dec指令 ADD和SUB指令 imul/mul和idiv/div 实践:我们来写一个简单的一位数加法器 NASM逻辑指令 AND 指令 …...

Vue-router 路由守卫执行流程图
vue-router 路由守卫执行的流程图(个人理解) 图1 - 图2...
ES6 中函数参数的默认值
概述: ES 允许给函数的参数赋初始值; 代码示例及相关说明: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>函数参数默认值</title> </head> <body> <script&g…...
Redis知识应用索引指南
Redis,全称为Remote Dictionary Server,是一个开源的高性能键值对数据库。它以其卓越的性能、丰富的数据结构和灵活的持久化机制,在现代应用中扮演着至关重要的角色 1 什么是redis Redis是一个使用ANSI C语言编写的开源、跨平台的键值存储系…...

ES6扩展运算符
1.介绍: ... 扩展运算符能将数组转换为逗号分隔的参数序列; 扩展运算符(spread)也是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的 参数序列,对数组进…...
【树莓派 5B】Python 版本切换
【树莓派 5B】Python 版本切换 前言整体思路具体步骤常见问题Python 无法建立与 Python3 的软连接 前言 本文基于树莓派5B 32-bit 树莓派OS,以 Python-3.11.2 降级到 3.9.2 为例,总结了在树莓派上切换 Python 版本的步骤,帮助大家轻松完成 P…...
windows C++-有效使用PPL(五)
如果可能,避免错误共享 当在不同处理器上运行的多个并发任务写入位于同一高速缓存行上的变量时,会发生错误共享。 当一个任务写入一个变量时,这两个变量的缓存行将会失效。 每当缓存行失效时,每个处理器必须重新加载缓存行。 因此…...

【排序】——1.冒泡排序法(含优化)
冒泡排序 1.原理 左边大于右边交换一趟排下来最大的交换到右边来(接下来所以文章用升序举例) 从左到右,相邻元素进行比较。 每次比较一轮,就会找到序列中最大的一个(最小的一个——降序)。这个数就会从序列的最右边冒出来。 以…...
在MySQL中创建数据库和表
在MySQL中,创建数据库和表是数据库管理的基础操作。下面我将详细解释如何先创建一个数据库,然后在该数据库中创建一个或多个表。 ### 1. 创建数据库 首先,你需要登录到MySQL服务器。然后,使用CREATE DATABASE语句来创建一个新的…...

Hadoop 安装教程——单节点模式和分布式模式配置
文章目录 一、预备知识1.1 Hadoop 发行版本1.2 部署方式 二、预备条件2.1 环境准备2.2 创建新用户(可选)2.3 配置 SSH 无密码登录2.4 下载 Hadoop2.5 编辑 hadoop-env.sh 脚本2.6 编辑 dfs 和 yarn 脚本 三、单节点模式部署3.1 官方使用案例3.2 查看运行结果 四、伪分布模式部署…...
给c++小白的教程10:一维数组
好久不见!我又来更教程了。 升到初二,由于学业原因,更新速度减慢了,十分抱歉! 以后将恢复到一周一次的频率 作者只是个普通学生,做的教程多有不足,希望大家批评指正! 赫炎今天在一…...

【排序】3.希尔排序法
希尔排序(直接插入排序的优化) 1.分组思想 上图中gap为5,说明要分成5组。 这5组分别用了五种颜色的线条连接起来了。 第1组:9、4 第2组:1、8 第3组:2、6 第4组:5、3 第5组:7、5 2.缩…...
商品详情数据API接口概述(json数据格式返回参考)
商品详情数据API接口是指一种编程接口(API,Application Programming Interface),它允许开发者或系统以编程方式获取商品的详细信息。这些信息包括但不限于SKU的详细信息、商品图片、商品属性、价格、库存状态、用户评价等。当调用…...

Jmeter简介
基础介绍 Jmeter录制脚本的原始是配置一个HTTP代理,然后浏览器通过这个代理访问测试页面从而完成脚本录制。 一、下载安装 jmeter本身不需要安装,需要配置环境变量JDK,然后打开bin文件夹中的jmeter.vbs即可。建议jdk 1.7及以上版本。 基本祖…...
网页前端开发之HTML入门篇:标题标签 heading
标题标签 heading <h1>-<h6>是HTML的标题标签,其标签内容会呈现六个不同级别的字号, <h1>字号最大,<h6>字号最小。 示例 <html><body><h1>一级标题</h1><h2>二级标题</h2>&l…...

医院信息化与智能化系统(3)
医院信息化与智能化系统(3) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应的…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...