文章目录
传送门:
04 Java数组
1. 一维数组
1.1 数组定义、特点、内存分配
-
数组定义:数组是相同类型数据的有序集合。
- 相同类型的若干个数据,按照一定先后次序排列组合而成。
- 其中,每一个数据称作一个数组元素。
- 每个数组元素可以通过一个下标来访问它们。
-
数组特点:
- 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
- 其元素必须是相同类型,不允许出现混合类型。
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
-
数组概述:数组是一个变量,存储相同数据类型的一组数据。声明一个变量就是在内存空间划出一块合适的空间。声明一个数组就是在内存空间划出一串连续的空间。
- 数组只有一个名称,即标识符
- 元素下标标明了元素在数组中的位置,从0开始
- 数组中的每个元素都可以通过下标来访问
- 数组长度固定不变,避免数组越界
-
数组的界限:每个数组都有一个属性length指明它的长度:
a.length
- 起点:数组名[0]
- 终点:数组名[length-1]
-
数组优缺点:
- 优点:按照索引查询效率高
- 缺点:添加删除元素效率低;按照内容查询效率低(无序)
1.2 如何使用数组
使用数组四步走:
-
声明数组,告诉计算机数据类型是什么
int[] a;
-
分配空间,告诉计算机分配几个连续的空间
a = new int[5];
也可以声明数组并分配空间
数据类型[ ] 数组名 = new 数据类型[大小] ; int[] arr1 = new int[5]; int [] arr2 = new int[5]; int arr3[] = new int[5];
-
数组赋值,向分配的格子里面放数据
a[0] = 8;
也可以声明数组并赋值
int[] arr4 = new int[]{1,2,3,4,5};
-
处理数据:
a[0] = a[0] * 10;
/* 使用数组求平均分 */ import java.util.Scanner; public class ArrayDemo{ public static void main(String[] args){ //声明数组并分配空间 int[] scores = new int[5]; int sum = 0; Scanner sc = new Scanner(System.in); System.out.println("请输入5位学员的成绩:"); for (int i = 0;i < scores.length;i++){ scores[i] = sc.nextInt(); sum = sum + scores[i];//成绩累加 } System.out.println("平均分是:"+(double)sum/scores.length); } }
public class ArrayDemo{
public static void main(String[] args){
//声明数组
int[] array;
//创建内存空间
array = new int[5];
//数组赋值
array[0] = 0;
array[1] = 1;
array[2] = 2;
array[3] = 3;
array[4] = 4;
//数组操作
System.out.println(array[0]);
}
}
需要注意的是,数组是引用类型,当创建完成数组之后相当于是在方法外定义了一个变量,此时数组中的值是有默认值的。默认是什么,取决于你定义的数组的类型:
- int:0
- String:null
- boolean:false
数组就算不赋值也会被默认值占用空间。
1.3 数组常见错误
- 编译出错,没有写明数组大小
- 编译出错,数组越界
- 编译出错,创建数组并赋值的方式必须在一条语句中完成
2. 一维数组的应用
- 查询元素
- 数组类型做形参
- 查询最大值最小值
- 添加元素或删除元素
- 排序
- Arrays工具类
- 理解main(String args[])
- 可变参数
3. 二维数组
3.1 二维数组的定义、特点
-
二维数组定义:二维数组可以看成以数组为元素的数组。例如:
int [][] a = {{1,2},{3,4,5,6},{7,8,9}}
JAVA中多维数组的声明和初始化应按从高维到低维的顺序进行,例如:
/* 二维数组可以称作数组的数组 定义二维数组的时候一定需要注意,必须要给定数组的长度 */ public class TwoArray{ public static void main(String[] args){ int[] arr = new int[6];//一维数组 int[][] arr2 = new int[3][];//二维数组 //创建二维数组的对象 arr2[0] = new int[5]; arr2[1] = new int[3]; arr2[2] = new int[4]; //赋值 arr2[0][0] = 1; arr2[0][1] = 2; arr2[0][2] = 3; arr2[0][3] = 4; arr2[0][4] = 5; arr2[1][0] = 6; arr2[1][1] = 7; arr2[1][2] = 8; arr2[2][0] = 9; arr2[2][1] = 10; arr2[2][2] = 11; arr2[2][3] = 12; for(int i = 0;i<arr2.length;i++){ for(int j = 0;j<arr2[i].length;j++){ System.out.print(arr2[i][j]+"\t"); } System.out.println(); } } }
Java中多维数组不必须是规则矩阵形式。
4. 数组的拷贝
使用java.lang.System类的静态方法
public static void arraycopy
(Object src, int srcPos, Object dest,int destPos,int length)
- 可以用于数组src从第srcPos项元素开始的length个元素拷贝到目标数组从destPos项开始的length个位置。
- 如果源数据数目超过目标数组边界会抛出IndexOutOfBoundsException异常。
案例:
import java.lang.System;
public class ArrayTest {
public static void main (String args[]){
String[] s = {"Mircosoft","IBM","Sun","Oracle","Apple"};
String[] sBak = new String[6];
System.arraycopy(s,0,sBak,0,s.length);
for(int i=0; i<sBak.length; i++){
System.out.print(sBak[i]+" ");
}
System.out.println();
int[][] intArray ={{1,2},{1,2,3},{3,4}};
int[][]intArrayBak = new int[3][];
System.arraycopy(intArray,0,intArrayBak,0,intArray.length);
intArrayBak[2][1] = 100;
for(int i =0;i<intArray.length; i++){
for (int j =0; j<intArray[i].length;j++){
System.out.print(intArrayBak[i][j]+" ");
}
System.out.println();
}
}
}
5. Java.util.Arrays
该类提供了关于数组操作的API。
- 打印数组—toString方法。
- 比较两个数组是否相同—equals方法。
- 数组排序—sort方法。
- 数组查找—binarySearch方法
6.命令行参数
JAVA应用程序的主方法(程序的入口) :
public static void main (String args[]) {…}
public static void main (String[] args) {…}
命令行参数:在启动Java应用程序时可以一次性地向应用程序中传递0~多个参数,这就是命令行参数。
命令行参数使用格式:
java ClassName lisa "bily" "Mr Brown“
由参数args接收
- 空格将参数分开
- 若参数包含空格,用双引号引起来