Java学习笔记(四):数组操作

版权声明:本文为博主原创文章,遵循 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: 如果觉得本篇本章对您有所帮助,欢迎关注、评论、赞!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值