廖雪峰java教程笔记-java数组操作


数组操作

遍历数组

for通过索引

for each直接得到元素

打印数组内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1.直接打印数组变量,得到的是数组在JVM中的引用地址:

int[] ns = { 1, 1, 2, 3, 5, 8 };
System.out.println(ns); // 类似 [I@7852e922

2.这并没有什么意义,因为我们希望打印的数组的元素内容。因此,使用for each循环来打印它:
int[] ns = { 1, 1, 2, 3, 5, 8 };
for (int n : ns) {
System.out.print(n + ", ");
}
3.使用for each循环打印也很麻烦。幸好Java标准库提供了Arrays.toString(),可以快速打印数组内容:
import java.util.Arrays;

public class Main {
public static void main(String[] args) {
int[] ns = { 1, 1, 2, 3, 5, 8 };
System.out.println(Arrays.toString(ns));
}
}

小结

1
2
3
遍历数组可以使用for循环,for循环可以访问数组索引,for each循环直接迭代每个数组元素,但无法获取索引;

使用Arrays.toString()可以快速获取数组内容

数组排序

冒泡排序

每次循环,将本次最大数放到后面

最多需要n-1次循环

8zVORH.png
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
实际上,Java的标准库已经内置了排序功能,我们只需要调用JDK提供的Arrays.sort()就可以排序

import java.util.Arrays;

public class Main {
public static void main(String[] args) {
int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
Arrays.sort(ns); //降序排列
System.out.println(Arrays.toString(ns));
}
}


必须注意,对数值数组排序实际上修改了数组本身
即变量ns指向的数组内容已经被改变了

如果对一个字符串数组进行排序,原来的字符串在内存中均没有任何变化,但是ns数组的每个元素指向变化了

小结

1
2
3
4
5
常用的排序算法有冒泡排序、插入排序和快速排序等;
冒泡排序使用两层for循环实现排序;
交换两个变量的值需要借助一个临时变量。
可以直接使用Java标准库提供的Arrays.sort()进行排序;
对数组排序会直接修改数组本身。

插入排序

快速排序

内置排序

import java.util.Arrays;

Arrays.sort(ns);

当数组为数值类型,数组内容已经改变;当数组为字符串数组时,元素指向发生改变

多维数组

多维数组定义

1
2
3
int[][] a =   new int[10] [5]

int[] [] = {{},{},...} # 二维数组的每个数组元素的长度并不要求相同,例如,可以这么定义
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Main {
public static void main(String[] args) {
int[][] ns = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
int[] arr0 = ns[0];
System.out.println(arr0.length); // 4
}
}

实际上arr0就获取了ns数组的第0个元素。因为ns数组的每个元素也是一个数组,因此,arr0指向的数组就是{ 1, 2, 3, 4 }

打印多维数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1.要打印一个二维数组,可以使用两层嵌套的for循环:

for (int[] arr : ns) {
for (int n : arr) {
System.out.print(n);
System.out.print(', ');
}
System.out.println();
}

2.或者使用Java标准库的Arrays.deepToString()
import java.util.Arrays;

public class Main {
public static void main(String[] args) {
int[][] ns = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
System.out.println(Arrays.deepToString(ns));
}
}

三维数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
三维数组就是二维数组的数组。可以这么定义一个三维数组:

int[][][] ns = {
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
},
{
{10, 11},
{12, 13}
},
{
{14, 15, 16},
{17, 18}
}
};

理论上,我们可以定义任意的N维数组。但在实际应用中,除了二维数组在某些时候还能用得上,更高维度的数组很少使用。

小结

1
2
3
4
二维数组就是数组的数组,三维数组就是二维数组的数组;
多维数组的每个数组元素长度都不要求相同;
打印多维数组可以使用Arrays.deepToString();
最常见的多维数组是二维数组,访问二维数组的一个元素使用array[row][col]

命令行参数

1
java程序的入口是main方法,它可以接受一个命令行参数,它是String数组
1
2
3
4
5
6
7
8
9
这个命令行参数由JVM接收用户输入并传给main方法:

public class Main {
public static void main(String[] args) {
for (String arg : args) {
System.out.println(arg);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
我们可以利用接收到的命令行参数,根据不同的参数执行不同的代码。例如,实现一个-version参数,打印程序版本号:

public class Main {
public static void main(String[] args) {
for (String arg : args) {
if ("-version".equals(arg)) {
System.out.println("v 1.0");
break;
}
}
}
}
上面这个程序必须在命令行执行,我们先编译它:

$ javac Main.java
然后,执行的时候,给它传递一个-version参数:

$ java Main -version
v 1.0
这样,程序就可以根据传入的命令行参数,作出不同的响应

本文标题:廖雪峰java教程笔记-java数组操作

文章作者:TTYONG

发布时间:2022年02月10日 - 17:02

最后更新:2023年03月30日 - 01:03

原始链接:http://tianyong.fun/%E5%BB%96%E9%9B%AA%E5%B3%B0java%E6%95%99%E7%A8%8B%E7%AC%94%E8%AE%B0-java%E6%95%B0%E7%BB%84%E6%93%8D%E4%BD%9C.html

许可协议: 转载请保留原文链接及作者。

多少都是爱
0%