【java】数组(超详细总结)

embedded/2024/10/23 13:16:09/

目录

一.一维数组的定义

1.创建数组

2.初始化数组

二.数组的使用

1.访问数组

2.遍历数组

3.修改数据内容

三.有关数组方法的使用

1.toString

2. copyOf

四.查找数组中的元素

1.顺序查找

2.二分查找binarySearch

五.数组排序

1.冒泡排序

2.排序方法sort

六.数组逆置

七.二维数组的定义

八.二维数组的打印

一.一维数组的定义

1.创建数组

数组定义有三种方法:

java">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.访问数组

通过数组的下标进行访问,数组在内存中是一块连续的内存空间

java">public class Test {public static void main(String[] args) {int[] array = {1,2,3,4,5};System.out.println(array[3]);}
}

数组的下标是从0开始的,所以数组用下标访问最大能到数组长度-1

java">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循环打印数组

java">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)打印数组

java">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打印数组

java">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.直接传变量

java">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.传的是数组

java">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.传的数组返回的也是数组

java">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方法的作用是将数组的数据变成字符串类型数据

java">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

java">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 - 要返回的副本的长度

java">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

java">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.顺序查找

java">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

二分查找必须是有序数组

java">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 - 要搜索的值

java">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.冒泡排序

java">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

java">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));}
}

六.数组逆置

java">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));}

七.二维数组的定义

二维数组同样有三种定义方式

java">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来打印

java">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.ppmy.cn/embedded/129823.html

相关文章

双11预售爆单,个性化消费趋势下3C数码品牌如何脱颖而出?

在双11预售爆单的背景下&#xff0c;3C数码品牌面临着前所未有的机遇与挑战。随着消费者需求的日益个性化和多样化&#xff0c;3C品牌需要采取一系列策略来脱颖而出&#xff0c;满足市场需求&#xff0c;提升品牌影响力。 一、双11大促3C数码产品热卖 对于双11这样的大促而言…

uniapp开发钉钉小程序踩坑记录...

自定义组件样式丢失 原因&#xff1a;钉钉不支持styleIsolation为apply-shared 解决方案&#xff1a; 1&#xff09;构建出来的包全局替换为shared --此方法本人验证可行 2&#xff09;将hbuildx降低版本&#xff08;未验证&#xff09; 接口返回的非json数据&#xff0c;…

C++——NetWork

1.network.h #include <iostream> #include <winsock2.h> #include <cstring>class NetWork {int type; // 通信协议类型int sock_fd; // socket 描述符sockaddr_in addr; // 通信地址int addrlen; // 通信地址字节数bool issvr; …

读书电子书资源个人常用汇总

“问渠哪得清如许&#xff0c;为有源头活水来&#xff01;”喜欢读书的朋友&#xff0c;一定想阅读更多的书籍充实自己的人生&#xff0c;以下提供一些网络上免费的资源。 大学资源网 https://www.dxzy163.com/list/index157.html书栈网https://www.bookstack.cn/电子书-天涯客…

齿轮参数及强度计算【机械设计工具集】

齿轮参数及强度计算软件绿色版是一个十分精准的齿轮精度计算工具&#xff0c;齿轮参数及强度计算软件绿色版是一款齿轮强度参数计算软件&#xff0c;操作简单、自动化程度高、灵活性强&#xff0c;输入电机功率&#xff0c;或扭矩等参数就能直接计算出齿轮所需模数、齿宽等参数…

postgresql是国产数据库吗?

PostgreSQL不是国产数据库。但是PostgreSQL对国产数据库的发展有着重要影响&#xff0c;许多国产数据库产品是基于PostgreSQL进行二次开发的。 PostgreSQL的开源特性也是其受欢迎的重要原因之一。开源意味着任何人都可以查看、修改和使用PostgreSQL的源代码。这使得PostgreSQL…

移动端面试问题笔记(一)

1. 1pxborder的问题 原因: 设备像素比不同 从移动端的角度说个具体的场景&#xff0c;以iphone6为例。 iphone6的屏幕宽度为375px&#xff0c;设计师做的视觉稿一般是750px&#xff0c;也就是2x&#xff0c;这个时候设计师在视觉稿上画了1px的边框&#xff0c;于是你就写了“bo…

A-23OH型树脂在汽车涂装行业溶剂回收中的应用

随着汽车制造业的不断发展&#xff0c;市场竞争愈发激烈。为了提升生产柔性、生产效率和成本效益&#xff0c;同时确保喷漆质量并满足日益增长的非标和定制化设计需求&#xff0c;汽车生产商需要寻求更加高效、环保的解决方案。 其中&#xff0c;水性涂料的应用已经成为一种趋势…