1. 数组的定义
- 数组元素是
相同数据类型
的变量 - 在
堆内存
中开辟连续
的空间 - 数组元素的总个数就是数组的长度
数组名.length
- 数组下标从0开始
数组名[下标]
2. 数组声明
- 数据类型 [] 数组名称 = new 数据类型[长度];
- 动态初始化
系统为数组分配初始值
一维数组:int [ ] arr =new int[10]
二维数组:int[] [] arr = new int [2][3]
- 静态初始化
初始化时指定每个数组元素的初始值,不需要指定长度
- 一维数组
int [] arr = new int[] {1,2,3,4.....}
或者int [] arr ={1,1,1,1,1}
- 二维数组
int [][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}}
3. 数组遍历
- for循环
// 一维数组
for(int i=0;i<arr.length;i++){arr[i]表示第i个元素}
// 二维数组
for (int i=0;i<arr.length;i++){ 第i行
for(int j=0;j<arr[i].length;j++){ 依次按行循环 第j列
arr[i][j]
}
}
- 增强for
// 一维数组
for(int item:arr){}
// 二维数组
for (int x[]:arr){ // 外层循环变量为一维数组
for(int item: x){
}
}
4.数组引用传递
数据是引用数据类型,使用数组之前要先实例化(分配空间),否则会报NullPointerException
异常
数组元素存储在堆内存中,数组名(变量)存储在栈内存中
引用传递的本质:同一块堆内存空间可以被不同的栈内存所指向
数组可作为参数传入方法中
public class ArrayDemo {
//返回一个数组类型,所以返回值类型定义为整形数组
public static int[] init() {
return new int[] {1, 2, 3, 4, 6};
}
//定义一个专门进行数组输出的方法
public static void printArray(int temp[]) {
for (int i = 0; i < temp.length; i++) {
System.out.print(temp[i] + "、");
}
}
public static void main(String args[]) {
int data[] = init(); //调用init方法,接受了数组,同时也可修改数组内容
printArray(data);
}
}
5. java库
数组排序:java.util.Arrays.sort(数组名称);
升序
数组拷贝:System.arraycopy(原数组名称, 原数组开始点, 目标数组名称, 目标数组开始点, 拷贝长度)
6. 数组排序
- 冒泡排序
依次比较两个相邻的元素
for(int x=0;x<arr.length-1;x++){ // 排序轮数
for(int y=0;y<arr.length-x-1;y++){ // 用于对比相邻元素的大小
if(arr[y]>arr[y+1){ // 交换位置
int temp = arr[y]
arr[y] = arr[y+1]
arr[y+1] =temp
}
}
}
- 快速排序
任意选择一个数据作为base,将比base小的数移至左边,比base大的数移至右边;递归调用此过程
- 反转排序
- 开辟一个等长的新数组,将原数组元素全部倒序保存
for(int x = arr.length - 1; x >= 0; x--)
- 在原数组上倒置
int head =0
int end =arr.length -1
int center = arr.length/2
for(int i=0;i<center;i++){
int temp = arr[head]
arr[head]= arr[end]
arr[end]=temp
head++
end--
}
- 二分查找(折半查找)
二分查找法只针对于有序数组,将数组分为两部分,每次进行判断都舍去其中一半
int start = 0
int end =arr.length-1
while(end >start){
int mid = (start+end)/2
if(index ==arr[mid]){
// 存在此数 返回下标
}else if(index>arr[mid]){
// 在右部分 start = mid+1
}else if(index<arr[mid]){
// 在左部分
end =mid-1
}
}
7. 对象数组
将对象定义为数组,
- 动态初始化
类名称 对象数组名称[] = new 类名称[长度];
- 静态初始化
类名称 对象数组名称[] = new 类名称[]{实例化对象,…};
class Person{
// 属性
private String name
private int age
// 构造方法
public Person(String name,int age){
this.name =name
this.age = age
}
}
Person ps[] = new Person[3] // 声明一个对象数组ps,长度为3
// 实例化
ps[0] = new Person(“jerry”,12)
ps[1]=new Person()
ps[2] = new Person()
- 静态初始化
Person ps[] = {new Person("jerry",12),new Person(),new Person()}