了解背景
类和对象这一章中有学习到包这么一个定义,首先了解到Java常用包有下列这些:
常用包 | 子类 |
---|
java.lang | String、Math、System、Thread | java.util | Arrays、List、Calendar、Random、Vector | java.io | 输入/输出类 | java.awt | 抽象窗口工具集,图形用户界面GUI | java.swing | Swing图形用户界面,一般应用场景更广泛 | java.text | Java格式化相关 | java.sql | 进行JDBC连接数据库变岸诚的相关类/接口 |
上述包中集成了比较多的类库。根据上述内容列了一个知识点的思维导图,需要掌握下列这些具体的实用类库: 数组中会调用Arrays类、System类中的一些方法,从数组的使用开始了解Java的一些实用类库。
一、创建一维数组
1.数组定义
- 数组是指相同类型的数据元素按一定顺序组成的复合数据类型,元素在数组中的相对位置用下标来指明
- 数组可分为一维数组、二维数组
- 一维数组实质是一组相同类型的数据的线性集合
2.数组的特点
- 一个数组中所有的元素都属于同一种类型
- 数组中的所有元素都是有序的
- 元素都是通过数组名和元素下标来确定,元素的下标从0开始
3.创建方式
数组是对象(对象要被声明和分配内存),允许使用new关键字进行内存分配,使用数组之前逆序先声明并且分配内存空间
类型 数组名[];
类型[] 数组名;
类型由8个基本数据类型和引用类型组成; 类型由数组元素的类型决定,数组元素和数组的数据类型要保持一致; 单个[]表示一维数组,两个[]表示二维数组
int arr[];
char cs[];
String str[]
或者写成下面这种,下面这种格式常用
int[] arr;
char[] cs;
String[] str;
声明数组时只是给出了数组名和元素的数据类型,并没有创建对象本身,只是在内存中创建了一个对象的引用。如上面的代码中声明的arr数组,在声明后,内存示意图如下: arr中对应一个内存单元,该内存单元用来保存指向数组实体的地址,目前为空(null),要想不为空,则需要给数组元素分配内存空间,即实例化数组。
数组名 = new 类型[数组元素个数];
arr = new int[4];
该语句执行后,系统会分配4个保存整数的内存空间,并把此内存空间的引用地址赋给arr。假设这个空间的内存地址为0x1000,内存分配过程如下,数组通过下标来区分数组中不同的元素,数组的下标从0开始:
类型 数组名 = new 类型[数组元素个数];
int month[] = new int[12];
int[] month = new int[12];
- 无论使用上述的哪种格式创建数组,数组一旦创建后,其大小是不可逆的,但是我们可以通过操作数组名来引用一个全新的数组空间。如:
public class Example4_1 {
int[] intArray = new int[5];
public static void main(String[] args){
int[] intArray = new int[15];
}
}
在这种情况下,intArray指向了一个由15个整数元素组成的新内存空间,而第一个由5个整数元素组成的内存空间将被丢弃,如果没有其它引用,此内存将会变成垃圾。
二、初始化一维数组
初始化数组就是在给数组分配完空间后,给数组的各个元素有确定的值,初始化也有两种方法。
1.默认初始化
- 定义:数组实例化后,各元素会获取相同的默认值,默认数据定义数组的不同的数据类型分别如下:
数组元素类型 | 初始值 |
---|
byte、short、int、long | 0(long为0L) | float、double | 0.0(float为0.0f,double为0.0D) | char | ‘\0’ | boolean | false | 引用类型 | null |
2.显示的初始化
- 定义:即使用列表形式,给各元素赋值
- 赋值形式有两种:大括号中式值列表,此外,声明时不需要指定元素个数
int[] arr1 = new int[]{1,2,3,4,5}
int[] arr2 = {1,2,3}
四、数组的基本操作
1.数组的属性
在掌握数组各操作之前,先了解数组具有的属性和方法:
- length:该属性自动保存数组的长度即元素的个数,数组的下标从0开始,故数组最后一个元素的下标值为length-1,length通常用于判定数组下标是否越界
- sort():Arrays类中包含的用来操作数组的各种方法,sort()方法提供多种重载形式,可对任意类型的数组进行升序排列
- binarySearch():属于Arrays类,binarySearch()方法提供多种重载形式,一般配合排序方法使用,此方法主要返回要搜索元素的索引值
- fill():主要用于替换数组元素
Arrays.fill(int[] a,int value);
Arrays.fill(int[] a,int from,int to,int value);
- copyOf()、copyOfRange():实现对数组的复制
Arrays.copyOf(arr,int newlenth);
Arrays.copyOfRange(arr,int from,int to);
System.arraycopy(src,int srcPos,dest,int destPos,int length);
2.数组的基本操作
利用数组的不同方法和属性,可以对数组中的数据进行一些具体的操作来实现目标值
import java.util.Arrays;
public class Example4_1 {
public static void main(String[] args) {
int[] day = new int[]{1, 2, 3, 4, 5, 6};
System.out.println("数值中元素个数:" + day.length);
getArrayDetail(day);
System.out.println("第5个元素的值为:" + day[4]);
int[] arr = new int[]{6, 5, 4, 3, 2, 1};
Arrays.sort(arr);
System.out.println("排序后,arr数组各下标对应的值为:");
getArrayDetail(arr);
System.out.println("2所在位置:"+Arrays.binarySearch(arr,2));
Arrays.fill(arr,20);
getArrayDetail(arr);
Arrays.fill(arr,0,2,0);
getArrayDetail(arr);
getArrayDetail(Arrays.copyOf(arr,7));
System.arraycopy(arr,0,day,0,arr.length);
getArrayDetail(day);
}
private static void getArrayDetail(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
五、二维数组的定义
1.定义
二维数组相当于一个x_y坐标轴,分别对其x、y轴赋值
类型 数组名[][];
int[][] a;
a = new int[2][];
a[0]=new int[2];
a[1] = new int[3];
2.使用
分别输出二维数组各自对应的具体值时需要用到嵌套for循环:
int[][] a;
a = new int[2][3];
a[0][0]=1;
a[0][1]=2;
a[0][2]=3;
for (int i = 0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
System.out.println(a[i][j]);
}
}
System.out.println(a.length);
System.out.println(a[0].length);
System.out.println(a[1].length);
输出结果为:
1
2
3
0
0
0
2
3
3
|