Java随笔记录第三章:数组


前言

使用数组时记住下标0是第1个
下标0是第1个
下标0是第1个!!!
(这句我想了很久,觉得还是放在开头最好)

这一章主要是讲数组,在实际使用的时候,如果我们要声明大量同数据类型的数据时,就可以使用数组,数组也分为一维数组和二维数组,根据实际情况也可以自行决定使用哪个,在下一章要写的面向对象的基础——类 里面也可以将数据和对象进行绑定,通过一维数组来进行数据的处理。且Java的数组和C语言里的数组不同,在C语言中指针和数组可以相互调用,但Java不需要主动处理指针,所以不用考虑指向未分配空间操作数据导致的安全性问题。

数组

用一个贴近现实的情景案例来举例:

举例

每个班有30个学生,每个学生都有自己的ID号(String类型存储),现编写程序遍历学生的ID并输出。

分析

如果用原来的思路则会新建30个String类型的对象与学生的ID号一 一对应,但这样操作无法实现数据的循环遍历且费时费力。这时我们就可以使用数组来对数据进行存储。

代码

若不通过数组则:

import java.util.UUID;

/**
 * @author Silence_Lurker潜默
 */
public class App {
    public static void main(String[] args) {
        String studentId01 = UUID.randomUUID().toString();
        String studentId02 = UUID.randomUUID().toString();
        String studentId03 = UUID.randomUUID().toString();
        String studentId04 = UUID.randomUUID().toString();
        String studentId05 = UUID.randomUUID().toString();
        // ...省略一部分无聊的操作...
        String sutdentId28 = UUID.randomUUID().toString();
        String sutdentId29 = UUID.randomUUID().toString();
        String sutdentId30 = UUID.randomUUID().toString();

        System.out.println(studentId01);
        System.out.println(studentId02);
        System.out.println(studentId03);
        // ...省略一部分无聊的操作...
        System.out.println(sutdentId28);
        System.out.println(sutdentId29);
        System.out.println(sutdentId30);
    }
}

代码臃肿难看不说而且操作复杂。

(UUID主要用于获取一个几乎无重复的数据,一般用于给大量无重复数据进行随机命名使用,这里偷个懒不一个个写了,也可以练习一下上一章中讲的输入配合输出进行使用效果更佳 : b)

若使用数组则:

import java.util.UUID;

/**
 * @author Silence_Lurker潜默
 */
public class App {
    public static void main(String[] args) {
        // 30个学生的数据
        String[] studentId = new String[30];

        for(int i = 0 ; i < studentId.length ; i++){
            studentId[i] = UUID.randomUUID().toString();
            System.out.println("第" + i + "个学生的随机编号为:" + studentId[i]);
        }
    }
}

这样代码量大幅度缩短且更加直观。下面会进行更加详细的介绍。

一维数组

数组的声明

首先是数组的声明:

[数据类型] [数组名][] = new [数据类型] [[数组长度]]

当然,以下这种方式也可以:

[数据类型] [] [数组名] = new [数据类型] [[数组长度]]

(套公式的话将方括号一起替换掉,但是注意下上文中代码的声明方式,原来总有人套着方括号问我为啥不能用的,也有把方括号删干净问我为啥不能用的,我就只好在需要方括号的位置写上两层方括号……这段我就留着了,回头谁再拿着声明错误来找我我就直接把这段丢他脸上

第一种方式主要是强调声明的数组是该数据类型的数组,若不初始化则后续声明的变量仅为相应的数据类型的 数据
第二种方式更主要是强调声明的是该数组类型的数组,若不初始化则后续声明的变量均为相应的数据类型的 数组
这段是重点啊!!!

举例
/**
 * @author Silence_Lurker潜默
 */
public class App {
    public static void main(String[] args) {
        // 30个学生的数据
        String[] abc = new String[30], bud = new String[30], str = new String[30];

        String sStr[] = new String[30], s[] = new String[30], s1[] = new String[30];

    }
}

这样对数组变量的声明作用都是一样的,如果要大量声明数组时建议使用第一个方式,如果要声明大量的基础数据仅有少部分数组时建议第二种方式。

数组数据的调用

import java.util.UUID;

/**
 * @author Silence_Lurker潜默
 */
public class App {
    public static void main(String[] args) {
        // 30个学生的数据
        String[] studentId = new String[30];

        for(int i = 0 ; i < studentId.length ; i++){
            studentId[i] = UUID.randomUUID().toString();
            System.out.println("第" + i + "个学生的随机编号为:" + studentId[i]);
        }
    }
}

不难看出数组主要是通过方括号来实现的对数据进行读取,相应的,在调用数据时是通过

[数组名][下标]

这样的意思也很好理解,就是指定该数组下的第n+1个数据。 为啥是n+1是因为Java和C的数组一样,都是从下标0开始分配下标,也就是说声明长度是30,但是实际可用下标范围是0~ 29,而不是1~30,这一点很关键,比如你分配了n个内存,那么下标就到n-1的位置,不会有下标为n的数据,这时会报数组越界的异常。

数组自身的属性

import java.util.UUID;

/**
 * @author Silence_Lurker潜默
 */
public class App {
    public static void main(String[] args) {
        // 30个学生的数据
        String[] studentId = new String[30];

        for(int i = 0 ; i < studentId.length ; i++){
            studentId[i] = UUID.randomUUID().toString();
            System.out.println("第" + i + "个学生的随机编号为:" + studentId[i]);
        }
    }
}

在上面这段代码中,应该也注意到了循环内部的循环条件为i < studentId.length,这个studentId.length就是数组自身的属性。
在Java中,基于面向对象编程的思想,所有的一切都属于对象,数组是由一连串的对象构成的,但同样的,数组本身也是个对象(没错,就是套娃 ),理论上这样可以套无限维的数组,但是正常情况下谁这么用啊…… 不会这样使用。
所有的数组都会自带一个length属性,即一开始所定义的数组长度。部分编辑器在通过 ‘.’ 开启自动辅助补全功能的时候其他方法很多都是Object类自带的方法(这也是数组亦为对象的体现),在后续的开发中会有一定作用,前期主要了解length属性即可。

二维数组

数组的声明

和一维数组相似
数组的声明:

[数据类型] [数组名][][] = new [数据类型] [[数组一维长度]][[数组二维长度]]

当然,以下这种方式也可以:

[数据类型] [][] [数组名] = new [数据类型] [[数组一维长度]][[数组二维长度]]

这里要注意一点,声明二维数组时,数组的一维长度是必须声明的,但是二位长度可以不用声明。

举例
import java.util.UUID;

/**
 * @author Silence_Lurker潜默
 */
public class App {
    public static void main(String[] args) {
        // 30个学生的数据
        String[][] studentId = new String[6][30];
        // 这样声明是将两个维都进行了长度的声明
        String[][] studentName = new String[6][];
        // 这样的声明也是合法的,但是在后续的调用中要声明对应的数组的长度
        String[] student = new String[30],nStudent[] = new String[6][];
        // 这样声明的话,student是一维数组,而NStudent是二维数组,虽然可以这样声明,但是因为容易混淆所以并不推荐。
    }
}

二维数组数据的调用

和一维数组相似,这里直接丢代码:

import java.util.UUID;

/**
 * @author Silence_Lurker潜默
 */
public class App {
    public static void main(String[] args) {
        // 30个学生的数据
        String[][] studentId = new String[6][30];
        
		for(int i = 0 ; i < studentId.length ; i++){
			
			for(int j = 0 ; j < studentId[i].length ; j++){
				studentId[i][j] = UUID.randomUUID().toString();
				System.out.println((i+1) + "班第" + j + "个学生的随机编号为:" + studentId[i][j]);
			}
			System.out.println();
		}

    }
}

二维数组自身的属性

和一维数组类似,主要使用的是length属性,但是务必要注意在使用length属性时,如果要调用一维数组的长度的话,必须要声明指定的下标,因为Java允许二维数组里面各一维数组的长度不同,所以在不指定下标的情况下找不到对应的长度。

多维数组

多维数组的应用和二维数组与一维数组的区别差不多,大家可以按照自己的理解去尝试一下,大多是时候二维数组已经可以满足各位的需求了,就不做过多的赘述了。(同样的,有问题可以在评论里留言或者直接私信来滴滴我,我看到后会回复的。)

常用的数组操作方法

Java是自带对数组进行操作的操作类Arrays类的,平时最常用的类就是sort()排序方法,需要注意的是如果自定义的类的对象的数组要使用Arrays.sort()方法是需要实现Comparable<T>接口,这里先不详细去讲,后面讲完类和对象的基础以后再进行相关讲解。

Arrays.sort()方法使用范例

import java.util.Arrays;

/**
 * @author Silence_Lurker潜默
 */
public class App {
    public static void main(String[] args) {
        int[] i = new int[] { 1, 2, 3, 4, 8, 5, 2, 79 };

        Arrays.sort(i);

        System.out.println(Arrays.toString(i));

    }
}

总结

以上就是今天要讲的内容,

祝各位Java的学习能够轻松愉快。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Silence_Lurker 潜默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值