【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

pic_4f587f1b.png

第一个参数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));}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科研绘图系列:R语言突出强调部分的饼图(pie plot)

文章目录 介绍加载R包数据数据预处理画饼图画图例合并图形系统信息介绍 饼图(Pie Chart),也称为圆图(Circle Graph),是一种圆形的统计图表,通过将圆分成若干扇形来展示数据的比例关系。每个扇形的角度大小代表了相应数据在总量中的占比。饼图的特点包括: 比例展示:直…

Redis知识应用索引指南

Redis&#xff0c;全称为Remote Dictionary Server&#xff0c;是一个开源的高性能键值对数据库。它以其卓越的性能、丰富的数据结构和灵活的持久化机制&#xff0c;在现代应用中扮演着至关重要的角色 1 什么是redis Redis是一个使用ANSI C语言编写的开源、跨平台的键值存储系…

10用户管理(Vue3+Spring Boot)

目录 1. 功能描述2. 接口地址3.后台Java代码4.前端框架搭建&#xff1a;views/user添加UserManageVue组件5. api/user.js中写请求接口代码6 获取用户信息7 删除用户8 修改状态9 效果演示 1. 功能描述 用户管理界面&#xff0c;对用户进行查询、状态变更、删除。2. 接口地址 #…

Linux系统——lvm逻辑卷

Linux系统——lvm逻辑卷 一、lvm逻辑卷1、lvm操作流程2、操作指令 二、逻辑卷操作1、创建逻辑卷1.1 /dev/cloud/openstack 5G xfs /cloud/openstack1.2 /dev/cloud/docker 10G ext4 /cloud/docker 2、逻辑卷扩容2.1 扩容流程2.2 需求一&#xff1a;扩容ext4文件系统的逻辑卷2.3…

Ubuntu-Ubuntu22.04下Anacodna3的qmake和Qt的qmake冲突问题

Ubuntu22.04下Anacodna3的qmake和Qt的qmake冲突问题 一、问题描述二、原因分析三、解决办法 一、问题描述 Ubuntu22.04下Anacodna3的qmake和Qt的qmake冲突问题 zhyzhy-HP:~/Sources/mpv-examples/libmpv/qt$ make g -c -pipe -g -Wall -Wextra -D_REENTRANT -fPIC -DQT_WIDGET…

TypeScript中 interface接口 type关键字 enum枚举类型

type interface总是傻傻分不清~~~ Type Aliases (type) type 关键字用于为类型定义一个别名。这可以是基本类型、联合类型、元组、数组、函数等。type 定义的类型在编译后的 JavaScript 代码中会被移除&#xff0c;不会留下任何运行时的代码。 //联合类型 type StringOrNumbe…

SQL JOIN的学习

SQL JOIN (w3school.com.cn) 之前跟着老师学数据库的时候学过&#xff0c;最近又比较频繁的在使用。 再复习一下。 Id_P是主键 Id_O是主键 1. SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P Orders.Id_P 2. SEL…

Idea 2023.2.7构建SpringCloud多模块项目

Idea 2023.2.7构建SpringCloud多模块项目 本文介绍如何使用idea 2023.2.7构建基于SpringCloud alibaba微服务项目&#xff0c;基于Nacos注册中心。 环境准备&#xff1a; JDK版本&#xff1a;jdk17 SpringBoot:3.3.4 SpringCloud:2023.0.3 Nacos服务端:2.4.3 1、创建父工程&a…

指针的理解

int arr[3] {10, 20, 30}; int *parr arr; 1. *parr 、 *arr 分别代表什么 指针parr指向数组arr[3]的首元素地址&#xff0c;arr数组名单独使用表示数组首元素地址&#xff0c;即arr>&arr[0]&#xff1b; *parr和*arr是对首元素地址的解引用,代表访问arr[0]的空间…

MongoDB 介绍

一、MongoDB 介绍 MongoDB 是一个开源的、面向文档的数据库管理系统。它采用了灵活的数据模型&#xff0c;以类似 JSON 的文档形式存储数据&#xff0c;具有高可扩展性、高性能和丰富的功能。 主要特点包括&#xff1a; 灵活的数据模型&#xff1a;文档型数据库允许存储不同…

C++面试速通宝典——29

543. 简述#ifdef、#else、#endif和#ifndef的作用 利用#ifdef、#endif将程序功能模块包括进去&#xff0c;以向特定用户提供该功能。 在不需要时用户可轻易将其屏蔽。 #ifdef MATH #include "math.c" #endif 在子程序前加上标记&#xff0c;以便于追踪和调试。 …

react hooks中在setState后输出state为啥没有变化,如何解决

在 React Hooks 中&#xff0c;setState 的概念被 useState 或 useReducer 钩子所替代。与类组件中的 setState 一样&#xff0c;这些钩子也是异步更新状态的。因此&#xff0c;如果你尝试在调用 setState&#xff08;即 setXXX 函数&#xff09;后立即读取状态值&#xff0c;你…

微知-BlueField DPU在lspci中显示Flash Recovery是什么意思?

效果&#xff1a; lspci |grep BlueField10:00.0 Memory controller: Mellanox Technologies MT42822 Family [BlueField-2 SoC Flash Recovery] (rev 01)*原因&#xff1a; 表示此时flash是empty空的&#xff0c;或者在flash中的FW是无法工作的。比如烧录错误。 这里指的一提…

How to list the environment variables in MySQL based on podman

有时候&#xff0c;我们期望系统的、完整的输出mysql中的环境变量&#xff0c;但是只是想看看&#xff0c;不想安装mysql&#xff0c;有没有什么好的办法呢&#xff1f; 其实&#xff0c;答案是有的。我们可以基于docker/podman来完成&#xff0c;这里推荐podman&#xff0c;示…

从不一样的角度体会MATLAB

MATLAB&#xff08;矩阵实验室&#xff09;是一个广泛使用的高性能语言&#xff0c;特别适合用于科学计算、数据分析和图形可视化。它的强大功能和灵活性使得它在工程、金融、科研及教育等领域得到了广泛应用。以下是对MATLAB的一些不同角度的介绍&#xff1a; 1. 编程环境 M…

大数据测试:Charles修改响应数据

上一篇大数据测试&#xff1a;Fiddler修改响应数据-CSDN博客 &#xff0c;有同学反馈有没有Charles的方式修改响应数据&#xff0c;本篇就是Charles修改数据操作步骤&#xff0c;相比较fiddler&#xff0c;Charles相对简单&#xff0c;便捷&#xff0c;我很喜欢 1、背景&…

为什么SSH协议是安全的?

SSH的传输层协议&#xff08;Transport Layer Protocol&#xff09;和用户鉴权协议&#xff08;Authentication Protocol&#xff09;确保数据的传输安全&#xff0c;这里只介绍传输层协议&#xff0c;是SSH协议的基础。 本文针对SSH2协议。 1、客户端连接服务器 服务器默认…

serv00 恢复如初 清理 回到刚注册状态 重生

内容介绍 本期主要介绍如何将serv00恢复到刚刚注册时的初始状态, 不管你是搭建了节点还是建立了个人博客网站, 使用本期介绍的方法, 都可以将已经写入了内容或者混乱的serv00重置到刚刚注册时的状态. 更多内容&#xff1a;https://lzphy.top/ 1 清除PM2进程 列出进程清单 …

Web组态数据联动

1. 通过get/post获取设备列表信息 2. websocket连接mqtt服务器&#xff0c;接收json报文信息 3. 通过Alpine进行数据联动 4. 封装svg对象&#xff0c;更新属性值 index.html <!DOCTYPE html> <html lang"en"> <head> <meta charset&qu…

Wavelet Convolutions for Large Receptive Fields

大感受野的小波卷积 论文链接&#xff1a;https://arxiv.org/abs/2407.05848v2 项目链接&#xff1a;https://github.com/BGU-CS-VIL/WTConv Abstract 近年来&#xff0c;人们一直试图增加卷积神经网络&#xff08;CNN&#xff09;的核大小&#xff0c;以模拟Vision Transfo…