数组的知识总结

数组
定义:存储相同数据类型的一组连续的数据
特点:
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);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值