文章目录
前言
使用数组时记住下标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的学习能够轻松愉快。