定义:存储相同数据类型的一组连续的数据
特点:
a.先声明再赋值再使用
b.数组的数据类型可以是八大基本数据类型和引用类型,数组本身是引用类型。
c.数组本身也是一个变量(局部变量),在栈区开辟空间,创建数组时用到new,也需在堆区开辟空间。
d.如果一个数组没有指向堆区某块内存地址,这个时候数组变量为null,如果使用这个变量会出现空指针异常
e.如果一个数组访问了不存在的索引,会出现数组越界
格式:
a.动态初始化: 在定义数组的时候默认值为堆区变量的默认值,需要给出数组的长度 int[] arr = new int[10]; int arr[] = new int[10]; 注意:byte ,short , int ,long默认值是0;float ,double 默认值是0.0;char '\u0000';boolean;false;引用类型 null
b.静态初始化: 在定义数组的时候先给出元素,然后系统会根据元素的个数计算长度,这种初始化不会指定数组的长度int[] arr = {1,2,3,4,5};
int[] arr = new int[]{1,2,3,4,5};
内存分配:
a.栈区: 先进后出,一般用来给局部变量开辟空间
b.堆区: 用于存储new出来的对象,堆区创建出来的对象都会有地址值
堆区一旦被赋值为null的时候,原来的内存空间不会被立刻回收,而是在垃圾回收器空闲的时候
c.方法区:静态区,常量池
数组的基本操作
a.数组的遍历 就是获取数组中的每一个元素
public static void loopPrint(int[] arr) {
String result = "";
for (int i = 0; i < arr.length; i++) {
if (i == 0) {
result += "[" + arr[i] + ", ";
} else if (i == arr.length - 1) {
result += arr[i] + "]";
} else {
result += arr[i] + ", ";
}
} }
b.求和求平均值double sum = 0.0;
for(int i = 0; i < arr.length; i++){
sum += arr[i];
}
double average = sum / arr.length;
c.求最值
public static int getMax(int[] arr){
int max = arr[0];
for(int i = 0; i < arr.length; i++){
if(arr[i] > max){
max = arr[i];
}
}
return max;
}
d.数组的倒置
public static void reverseArray(int[] arr){
for(int i = 0; i < arr.length / 2; i++){
int temp = 0;
temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
}
e.数组的排序
1.冒泡排序
public static void bubbleSort(int[] arr){
for(int i = 0; i < arr.length - 1; i++){
for(int j = 0; j < arr.length - 1 - i; j++){
if(arr[j] > arr[j+1]){
int temp = 0;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
2.选择排序
public static void selectSort(int[] arr){
for(int i = 0; i < arr.length; i++){
for(int j = i+1; j < arr.length; j++){
if(arr[j] > arr[i]){
int temp = 0;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
f.查找
1.基本查找(针对无序的)
public static int basicSearch(int[] arr, int num){
for(int i = 0; i < arr.length; i++){
if(num == arr[i]){
return i;
}
}
return -1;
}
2.二分法查找(针对有序的)
public static int binarySearch(int[] arr, int num){
int max = arr.length - 1;
int min = 0;
int mid = (max + min) / 2;
while(arr[mid] != num){
if(arr[mid] > num){
max = mid - 1;
} else if(arr[mid] < num){
min = mid + 1;
}
if(min > max){
return -1;
}
mid = (max + min) / 2;
}
return mid;
}
使用Arrays工具类进行快速查找和排序
1.对数组元素进行输出public static String toString(int[] arr)
2.对数组进行排序
public static void sort(int[] arr); 采用的是快速排序法
3.对数组进行二分法查找
public static int binarySearch(int[] arr, int key);