版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://mp.csdn.net/mdeditor/100728414
绪言
最近开始学习Java,主要教材是廖雪峰老师的Java教程。为了巩固学习的成果,并作为以后查阅的参考,我计划写一系列学习笔记。
这是本系列的第四篇 – 数组操作。
本节的内容是数组的操作,包括:
遍历;
排序。
多维数组的概念。
遍历数组
遍历数组有两种方法,for循环和for each循环。
for循环
举个栗子:
public class Main {
public static void main(String[] args) {
int[] ns = { 1, 4, 9, 16, 25 };
for (int i=0; i<ns.length; i++) {
int n = ns[i];
System.out.println(n);
}
}
}
结果:
1
4
9
16
25
for each循环
举个栗子:
public class Main {
public static void main(String[] args) {
int[] ns = { 1, 4, 9, 16, 25 };
for (int n : ns) {
System.out.println(n);
}
}
}
结果:
1
4
9
16
25
打印数组内容
直接打印数组变量,得到的是数组在JVM中的引用地址:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] ns = {1, 4, 9, 16, 25};
System.out.println(ns);
}
}
结果:
[I@279f2327
希望打印的数组的元素内容,可以使用Arrays.toString():
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] ns = {1, 4, 9, 16, 25};
System.out.println(Arrays.toString(ns));
}
}
结果:
[1, 4, 9, 16, 25]
数组排序
对数组进行排序是程序中非常基本的需求。常用的排序算法有冒泡排序、插入排序和快速排序等。
冒泡排序
举个栗子:
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 };
// 排序前:
System.out.println(Arrays.toString(ns));
for (int i = 0; i < ns.length - 1; i++) {
for (int j = 0; j < ns.length - i - 1; j++) {
if (ns[j] > ns[j+1]) {
// 交换ns[j]和ns[j+1]:
int tmp = ns[j];
ns[j] = ns[j+1];
ns[j+1] = tmp;
}
}
}
// 排序后:
System.out.println(Arrays.toString(ns));
}
}
结果:
[28, 12, 89, 73, 65, 18, 96, 50, 8, 36]
[8, 12, 18, 28, 36, 50, 65, 73, 89, 96]
冒泡排序的特点是,每一轮循环后,最大的一个数被交换到末尾,因此,下一轮循环就可以“刨除”最后的数,每一轮循环都比上一轮循环的结束位置靠前一位。
Arrays.sort()
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));
}
}
结果:
[28, 12, 89, 73, 65, 18, 96, 50, 8, 36]
[8, 12, 18, 28, 36, 50, 65, 73, 89, 96]
多维数组
二维数组
先看一下二维数组的定义:
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(ns.length);
}
}
结果:
3
要打印一个二维数组,可以使用两层嵌套的for循环:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[][] ns = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int[] arr : ns) {
for (int n : arr) {
System.out.print(n);
System.out.print(",");
}
System.out.println();
}
}
}
结果:
1,2,3,
4,5,6,
7,8,9,
使用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]]
三维数组
先定义一个三维数组:
int[][][] ns = {
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
},
{
{10, 11},
{12, 13}
},
{
{14, 15, 16},
{17, 18}
}
};
访问三维数组的某个元素,可以用ns[2][0][1],得到15。
理论上,我们可以定义任意的N维数组。但在实际应用中,除了二维数组在某些时候还能用得上,更高维度的数组很少使用。
Xmind
最后,放上这一节的思维导图:
参考资料
PS: 如果觉得本篇本章对您有所帮助,欢迎关注、评论、赞!