一、什么是数组?
1.数组是指一组数据的集合,数组中的每个数据被称作元素。在数组中可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致。
2.总结:相同数据类型的元素组成的集合被称为数组。
二、数组的定义
1.在Java中数组的定义格式
1.1定义基本类型数组:数据类型[ ] 数组名 = new 数据类型[元素个数或数组长度];
注意:数据类型[ ] 数组名 或 数据类型 数组名[ ]两种写法均可
声明数组时,不规定数组长度,在使用new关键字分配空间时需要指定分为空间大小,也就是元素个数或数组长度
执行new语句时才使得数组分配到指定的空间大小(也就是元素个数或数组长度)
int[] x = new int[10]
注释:此行代码表示在内存中定义了10个int类型的变量。
注意事项:第一个变量名为 x[0],第二个变量名为x[1],以此类推第十个变量名为x[9]。
//此行代码另一种写法
int[] x; //声明了一个int[]的变量
x = new int[10]; //创建了一个长度为10的数组
1.2初始化(声明数组)数组
基本类型的数组创建之后初始值:整型数组(byte,short,int,long):初始值为0。
浮点型数组(float,double):初始值为0.0。
布尔类型(boolean):初始值为false。
字符类型(char):初始值为一个空字符,即为‘\u000’
引用数据类型的数组创建之后初始值:为null,意为不引用任何对象
静态初始化:在声明数组的同时对数组的元素进行初始化。
int[] arr = {10,-1,23,62,95,16,72};
或者
int[] arr;
arr = new int[]{10,-23,456,95,-12,45}
动态初始化:声明数组,数组的元素的初值为0。
int[] arr = new int[10];
三、定义数组和访问数组等常用的操作的案例
1.获取数组的长度
public class Demo {
public static void main(String[] args) {
//定义int类型数组,并定义其长度为10,并输出。
int[] arr;
arr = new int[10];
int arrLong = arr.length;
System.out.println("arr数组的长度为" + arrLong); //输出结果:arr数组的长度为10
}
}
2.访问数组元素(也称为数组的遍历)
public class ArrayDemo04 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 }; // 定义数组
//正序输出
// 使用for循环遍历数组的元素
for (int i = 0; i < arr.length; i++) {
System.out.println("数组元素" + arr[i]); // 通过索引访问元素
}
//逆序输出
for(int i = (arr.length-1);i>=0;i--){
System.out.println("数组元素" + arr[i])
}
}
}
3.数组的最大值与最小值
public class Demo {
public static void main(String[] arg){
int[] arr = { 7, 6, 2, 1, 9, 8 }; //静态初始化一个数组
//输出最大值
int max = arr[0]; //定义变量max并假设第一个元素为最大值
//通过for循环遍历数组中的元素
for (int x = 1; x < arr.length; x++) {
if (arr[x] > max) { //比较 arr[x]的值是否大于max
max = arr[x]; //条件成立,将arr[x]的值赋给max
}
}
System.out.println("max = " + max); //打印最大值
//输出最小值
int min = arr[0];//定义变量min并假设第一个元素为最大值
//通过for循环遍历数组中元素
for (int i = 0; i < arr.length; i++) {
if (arr[i]<min) { //比较 arr[i]的值是否小于min
min = arr[i]; //条件成立,将arr[i]的值赋给min
}
}
System.out.println("min = "+min); //打印最小值
}
}
4.数组的复制(两种方法)
a.第一种:使用System.arrcopy()方法可以实现数组的复制
public static void arraycopy(Object src,int srcPos,Object dest,int destPos.int length)
src:指原数组
srcPos:指原数组中的起始位置
dest:指目标数组
destPos:指目标数组中的起始位置
length:要复制的数组元素的数量
public class Demo01 {
public static void main(String[] args) {
int[] arr01 = {10,27,65,1,3};
int[] arr02 = new int[5];
System.arraycopy(arr01, 0, arr02, 0, 4);
//通过遍历输出数组arr02
for (int i = 0; i < arr02.length; i++) {
System.out.println("数组元素" + arr02[i]); // 通过索引访问元素
}
}
}
b.第二种:使用java.util.Arrays类的方法可以实现数组的复制
数据类型[] newArray = Arrays.copyOf(数据类型[] original ,int newLength);
特点:生成的新数组是原始数组的副本
newLength小于原数组,则进行截取。
newLength大于原数组,则用0或null进行填充。
所以产生的新数组可以大于原数组的长度。
import java.util.Arrays;
public class Demo02 {
public static void main(String[] args) {
int[] arr01 = {1,2,3,4,5};
int[] arr02 = Arrays.copyOf(arr01,6);
//通过遍历输出arr02数组
for (int i = 0; i < arr02.length; i++) {
System.out.println(arr02[i]);
}
}
}
//输出结果 1,2,3,4,5,0
5.数组的扩容
数组的长度在创建后不可改变,所谓的扩容是指创建一个更大的新数组并将原有数组的内容复制到其中。
可以通过在4里面提到的java.util.Arrays类的方法,来实现数组的扩容
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
int arrLong01 = arr.length;
System.out.println("数组arr的长度" + arrLong01);
arr = Arrays.copyOf(arr, arr.length+1); //数组arr的长度+1
int arrLong02 = arr.length;
System.out.println("数组arr扩容之后的长度" + arrLong02);
}
}
6.数组的排序
a.数组的排序是最常用的算法之一。
b.常用的排序算法:插入排序,冒泡排序,快速排序。
c.对于排序算法的优劣至关重要,决定因素就是元素的交换顺序的次数。
在Java的官方中提供了数组的排序方法由Arrays.sort()方法
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
int[] arr = {15,62,95,63,12,1,2,4,84,96,32,12,75,62,1,2,78,21,58,62161,1512,151,541};
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}