author:Floating clouds
date:2020-11-19*
数组
数组理解
数组,什么是数组呢?
通俗的说,数组是将类型相同的数据有序的组织起来的一种方式;里面既可以存放基本数据类型的数据也可以存放引用类型数据。
每个数组都有一个名字,里面存放的每个数据叫做数组的元素;因为数组存放的数据(元素)是有序的,所以数组里每个元素都有对应的下标(也称索引(index)),这里注意,数组元素的索引不像自然数那样,它是从0开始的;数组的长度为length,计算length时只需要数组名点length就可以了;因为数组的索引(下标)是从零开始的,所以数组的最大索引(数组的最后一个元素下标)为length-1;数组可以分为一维数组和多维数组,下面就给大家介绍。
一维数组
一维数组简单来说就是只有一列的数组,也是最简单的数组。
一维数组的创建
创建方式有两种:
- 静态创建
- 动态创建
如下代码:
package com.Array;
public class Test01 {
public static void main(String[] args) {
//静态创建一个整数类型数组
int[] arr1 = {1,2,3,6,7,8,9};
//或者
// int arr1[] = {1,2,3,6,7,8,9};
//动态创建一个整数类型数组
int[] arr2 = new int[7];
//或者
// int arr2[] = new int[7];
}
}
二维数组
二维数组比一维数组复杂,他是把一维数组作为他的元素;换句话说,二维数组的每个元素就是一个一维数组。
二维数组的创建
创建方式与一维数组创建一样有静态创建和动态创建,代码如下;
package com.Array;
public class Test02 {
public static void main(String[] args) {
//静态创建一个简单的二维数组
int[][] arr1 = {{1,2},{1,3},{2,3}};
//或者
// int arr1[][] = {{1,2},{1,3},{2,3}};
//动态创建一个简单的二维数组
int[][] arr2 = new int[1][2];
//或者
// int arr2[][] = new int[1][2]
}
}
因为二维数组是由多个一维数组组成,所以计算长度要稍微复杂一点,给大家写个例子:
package com.Array;
public class Test02 {
public static void main(String[] args) {
//静态创建一个简单的二维数组
int[][] arr = {{1,2},{1,3},{2,3}};
int len = 0;
len = arr[0].length+arr[1].length+arr[2].length;
System.out.println(len);
}
}
当然,这是在知道数组元素个数的情况下,如果不知道的话要利用for循环如下:
package com.Array;
public class Test02 {
public static void main(String[] args) {
//静态创建一个简单的二维数组
int[][] arr = {{1,2},{1,3},{2,3}};
int len = 0;
for(int i = 0;i<arr.length;i++) {
len = len+arr[i].length;
}
System.out.println(len);
}
}
多维数组
同上面一样,n维数组就是有多个(n-1)维数组组成,因为结构比较复杂,所以很少用于生活中;这里就给大家简单创建一个三维数组:
package com.Array;
public class Test03 {
public static void main(String[] args) {
// 简单静态创建一个三维数组
int[][][] arr = {{{1,9,2},{3,2},{6,6}},{{1,2,7},{1,5},{3,5,0,6}},{{9,6},{4,4},{8,4}}};
int len = 0;
for(int i = 0;i<arr.length;i++) {
int[][] arr1 = arr[i];//把三维数组中的各元素放于一个二维数组里
for(int j =0;j<arr1.length;j++) {
int[] arr2 = arr1[j];//把二维数组arr1的各元素放于一维数组arr2中
len = len+arr2.length;
}
}
System.out.println(len);
}
}
是不是感觉非常复杂呢?所以说数组每多一维,复杂度会上增数倍。
示例
接下来给大家示例两个一维数组的基本应用吧!
示例1:
package com.Array;
/*
* 简单数组逆置
*/
public class Test04 {
public static void main(String[] args) {
byte[] arr = {1,3,5,8,9};
//思路:利用一个循环把数组的对称元素互相交换,因为是对称的,所以循环的次数为数组长度的一半
int len = arr.length;
for(int i = 0;i<len/2;i++) {
byte temp = arr[i];//定义一个数,用来作为数组元素交换的中间变量
arr[i] = arr[len-1-i];//把数组的第i个元素的对称元素赋值给数第i个元素
arr[len-1-i] = temp;
}
//遍历逆置后的数组,看看是否逆置成功;这里用了个增强for循环
for(int j:arr) {
System.out.println(j);
}
}
}
示例2:
package com.Array;
import java.util.Random;
/*
1. 随机取数,与随机点名系统等等相似
*/
public class Test05 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9};
Random random = new Random(); //创建随机对象;关于什么是对象后续会讲到
int nextInt = random.nextInt(arr.length);//生成一个随机数,范围为数组的索引
int number = arr[nextInt];
System.out.println(number);
}
}
总结
关于数组,需要注意下面几点:
1.数组一旦创建成功,长度就不可改变;
2.数组是有序的;
3.内存分配:数组在创建成功后就会占用内存里的一片空间,在程序结束之前都不会释放,因此,即便后面改变了数组的元素,原来的空间也不会变,而是在原来的基础上,再次分配一个新的空间,用来存储改变后的数组;所以说数组一旦创建长度就不可更改。
结语
今天给大家分享了数组,希望对大家有用;如果有发现不对或者不完善的地方,欢迎留言指出,谢谢!