Java 第八课 数组
程序员文章站
2024-01-06 14:06:58
...
一、
数组是相同数据类型的连续的数据集合,可以用一个统一的名字和不同的ID表示数组中的元素。按照数组的维度可以把数组分一维、二维和多维数组。
一维数组:
1.声明:
声明数组:
数据类型[] 数组名; | 或是数据类型 数组名[];
int[] score; | int score[];
String[] name; | String name[];
***注意:声明是不能指定数组长度:
以下方式是错误的:
int size[10];***
2.分配空间:
声明数组只是的到了一个存储数据的变量,并没有为数组分配存储空间。在Java中,使用new来分配空间。
数组名 = new 数据类型[数组长度];
score = new int[10];
name = new String[10];
3.声明时分配:
数据类型 数组名 = new 数据类型[数组大小];
int score = new int [10];
注意:一旦声明了数组的大小,就不能再修改。这里的数组长度也是必需的,不能少。
4.初始化数组:
1. 使用 new 指定数组大小后进行初始化:
创建数组之后,元素的值并不确定,需要为每一个数组的元素进行赋值
type[] array = new type[size];
int [] score = new int[2];
score[0] - 90;
score[1] = 88;
2.使用 new 指定数组元素的值
type[] array = new type[value0, value1,......,valuen-1];
int[] score = new int [90, 88];
3.直接指定数组元素的值
type[] array[value0, value1,.....,valuen-1];
int[] score[90, 88];
二维数组
二维数组可以理解为一个特别一维数组,只是它的换素还是数组。Java 并不直接支持二维数组,但是允许定义数组元素是一维数组的一维数组
1.声明一个二维数组:
type 数组名[][] | 或是type[][] 数组名;
int score[][]; | 或是char[][] sex;
2.初始化二维数组:
2.1. array=new type[][]{array0,array1, ....., arrayn-1};
例如:
int[][] array;
array = new int[][]{
{1, 2,3},
{2,3,4},
};
2.2 array=new type[][]{new 构造方法(参数列),…};
例如:
int[][] temp;
temp=new int [][]
{
{new int(1),new int(2)},{new int(3),new int(4)}
};
2.3 type[][] array={{第1行第1列的值,第1行第2列的值,…},{第2行第1列的值,第2行第2列的值,…},…};
例如:
int[][] temp={{1,2},{3,4}};
3、多维数组:
参考二维数组
4、数组Array内嵌方法
1.比较两个数组是否相等:
相等的条件不仅要求数组元素的个数必须相等,而且要求对应位置的元素也相等
语法:
Arrays.equals(Array a, Array b);
2.填充数组:
填充制定位置数组值
语法:
Arrays.fill(Array a, value); //a: 要填充的数组, value:要填充的值
3.查找指定元素:
使用二分搜索法来搜索指定数组,以获得指定对象,该方法返回要搜索元素的索引值。
语法:
Arrays.binarySearch(Object[] a,Object key);
Arrays.binarySearch(Object[[]a, int startIndex, int stopIndex, Object key) ;
a: 表示要查找的数组, startIndex: 表示开始索引位置下标;stopIndex: 表示结束索引位置下标; key:表示要查找的值。
4.数组复制:
Java实现了4种数组复制的方式:
Arrays 类的方法:copyof();copyOfRang();
System类的方法:arraycopy();
Object类的方法:clone();
1.Arrays类的方法:
语法格式:
Arrays.copyOf(dataType[] srcArray, int length);
复制时,默认从源数组的第一个元素(索引值为 0)开始复制,目标数组的长度将为 length。如果 length 大于 srcArray.length,则目标数组中采用默认值填充;如果 length 小于 srcArray.length,则复制到第 length 个元素(索引值为 length-1)即止。
**注意:目标数组如果已经存在,将会被重构。**
Arrays.copyOfRange(dataType[] srcArray,int startIndex,int endIndex);
srcArray 表示源数组;startIndex 表示开始复制的起始索引,目标数组中将包含起始索引对应的元素,另外,startIndex 必须在 0 到 srcArray.length 之间;endIndex 表示终止索引,目标数组中将不包含终止索引对应的元素,endIndex 必须大于等于 startIndex,可以大于 srcArray.length,如果大于 srcArray.length,则目标数组中使用默认值填充。
**注意:目标数组如果已经存在,将会被重构。**
2.System类的方法:
语法格式:
System.arraycopy(dataType[] srcArray,int srcIndex,int destArray,int destIndex,int length);
srcArray 表示源数组;srcIndex 表示源数组中的起始索引;destArray 表示目标数组;destIndex 表示目标数组中的起始索引;length 表示要复制的数组长度。使用此方法复制数组时,length+srcIndex 必须小于等于 srcArray.length,同时 length+destIndex 必须小于等于 destArray.length。
注意:目标数组必须已经存在,且不会被重构,相当于替换目标数组中的部分元素。
3.clone类的方法:
语法格式:
arrayName.clone();
clone() 方法的返回值是 Object 类型,要使用强制类型转换为适当的类型.
注意:目标数组如果已经存在,将会被重构
static void MyArrayCopy() {
int i = 0;
int srcArray[] = {1, 2, 3, 4, 5,};
int destArray1[] = Arrays.copyOf(srcArray, 8);
int destArray2[] = Arrays.copyOfRange(srcArray, 1, 8);
int destArray3[] = new int[5];
System.arraycopy(srcArray, 0, destArray3, 0, 5);
int destArray4[] = (int[])srcArray.clone();
for(i = 0; i < destArray1.length; i++)
System.out.print(destArray1[i] + "\t");
System.out.println("\n=====================");
for(i = 0; i < destArray2.length; i++)
System.out.print(destArray2[i] + "\t");
System.out.println("\n=====================");
for(i = 0; i < destArray3.length; i++)
System.out.print(destArray3[i] + "\t");
System.out.println("\n=====================");
for(i = 0; i < destArray4.length; i++)
System.out.print(destArray4[i] + "\t");
System.out.println("\n=====================");
}
输出结果:
1 2 3 4 5 0 0 0
=====================
2 3 4 5 0 0 0
=====================
1 2 3 4 5
=====================
1 2 3 4 5
=====================
5、数组排序:
import java.util.Arrays;
语法格式:
Arrays.sort();