数组(java)

发布于:2024-04-14 ⋅ 阅读:(65) ⋅ 点赞:(0)

目录

数组的定义和使用:

数组的初始化:

遍历数组:

数组是引用类型 

初始JVM的内存分布

再读引用变量

认识null 

数组的应用场景

作为函数的参数

作为函数的返回值

数组练习

数组转字符串

排序 

冒泡排序

数组逆序

数组求平均值


数组的定义和使用:

数组是一块连续的内存,用来存储相同类型的数据

数组名.length: 

int[] array3 = new int[10];//默认全部初始化为0
System.out.println(array3.length);//数组长度
int n = 10;
int[] array4 = new int[n];//

数组的初始化:

数组的初始化主要分为动态初始化以及静态初始化

  1. 动态初始化:在创建数组时,直接指定数组中元素的个数
int[] array3 = new int[10];//默认全部初始化为0
  1. 静态初始化:在创建数组时不直接指定数组元素个数,而是直接将具体的数据内容进行指定
int[] array = {1, 2, 3, 4};//简化形式
//int array2[]={1,2,3,4};//不推荐
int[] array2 = new int[]{1, 2, 3, 4};

new是一个关键字,一般用来new对象,即数组是一个对象,Java当中一切皆对象 

int[] array1;
array1 = new int[10];
int[] array2;
array2 = new int[]{10, 20,30};
// 注意省略格式不可以拆分,否则编译失败
// int[] array3:
// array3 = {1, 2, 3};
int[] array = null;//小写
System.out.println(array);

如果数组中存储元素类型为引用类型,默认值为null

遍历数组:

 //增强for循环  for-each循环
for (int x : array2) {
    System.out.print(x + " ");
}

遍历这个数组的时候,把数组当中的元素赋值给x

数组是引用类型 

初始JVM的内存分布
  1. 程序运行时代码需要加载到内存
  2. 程序运行产生的中间数据要存放在内存
  3. 程序中的常量也要保存
  4. 有些数据可能需要长时间存储,而有些数据当方法运行结束后就要被销毁

如果堆内存中存储的数据不加区分的随意存储,那对内存管理起来将会非常麻烦

因此JVM对所使用的内存按照功能的不同进行了划分:

再读引用变量

认识null 
public static void main(String[] args) {
    int[] array = null;//一个不指向对象的引用
    System.out.println(array.length);
}

array当前不指向任何对象,因此没有长度,不能对这个内存进行任何读写操作,一旦尝试读写,就会出现异常

注意:JAVA中并没有约定null和0号地址的内存有任何关联

对象不能指向对象,只有引用可以指向对象

数组的应用场景

作为函数的参数
public static void main(String[] args) {
        int[] array = {1, 2, 3, 4};
        fun(array);
        for (int x : array) {
            System.out.print(x + " ");
        }   
    }
    public static void fun(int[] array) {
        array = new int[]{11, 22, 33, 44, 55};//重新在堆中开辟了地址
    }

结果:

只是修改了形参的指向 

作为函数的返回值
public static void main(String[] args) {
    int[] array = getArray();
    System.out.println(array[0]);
}
public static int[] getArray() {
    int[] arr = {
   1,2,3,4,5,6};
    return arr;  // return 返回数组,返回的是数组内存中地址
}

数组练习

数组转字符串
import java.util.Arrays;

public class Shift {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5};
        System.out.println(Arrays.toString(array));
    }
}

排序 
import java.util.Arrays;

public class Shift {
    public static void main(String[] args) {
        int[] array = {21, 12, 13, 54, 5};
        System.out.println(Arrays.toString(array));//打印
        // Arrays.sort(array);//自动排序
        Arrays.sort(array, 0, 2);//区间排序[0,2)——>0,1
        System.out.println(Arrays.toString(array));
    }
}

 开发效率很高!

import java.util.Arrays;

public class Shift {
    public static void main(String[] args) {
        int[] array = {21, 12, 13, 54, 5};
        System.out.println(myToString(array));//打印
        // Arrays.sort(array);//自动排序
        Arrays.sort(array, 0, 2);//区间排序[0,2)——>0,1
        System.out.println(myToString(array));
        int[] array2 = {};
        System.out.println(Arrays.toString(array2));//[]
    }

    public static String myToString(int[] array) {//相当于Arrays.toString
        if (array == null) {
            return "null";
        }
        if (array.length == 0) {
            return "[]";
        }
        String ret = "[";
        for (int i = 0; i < array.length; i++) {
            ret += array[i];
            if (i != array.length - 1) {
                ret += ", ";
            }
        }
        ret += "]";
        return ret;
    }

}
冒泡排序
public class bubbleSort {
    public static void bubbleSort(int[] array) {
        //i代表趟数
        for (int i = 0; i < array.length - 1; i++) {
            //已经优化了,每次比上次少1个
            boolean flg = false;
            for (int j = 0; j < array.length - 1 - i; j++) {
                if (array[j] > array[j + 1]) {
                    int tmp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = tmp;
                    flg = true;
                }
            }
            if (!flg) {
                //没有交换,进一步优化
                return;
            }
        }
    }
数组逆序
public class Reverse {
    public static void reverse(int[] array) {
        if (array == null) {
            return;
        }
        int i = 0;
        int j = array.length - 1;
        while (i < j) {
            int tmp = array[i];
            array[i] = array[j];
            array[j] = tmp;
            i++;
            j--;
        }
    }

    public static String myToString(int[] array) {
        if (array == null) {
            return "null";
        }
        if (array.length == 0) {
            return "[]";
        }
        String ret = "[";
        for (int i = 0; i < array.length; i++) {
            if (i != array.length - 1) {
                ret += (array[i] + "," + " ");
            } else {
                ret += array[i];
            }
        }
        return ret += "]";
    }

    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4};
        reverse(array);
        System.out.println(myToString(array));
    }
}
数组求平均值
public class Average {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4};
        System.out.println(avg(arr));
    }

    public static double avg(int[] arr) {
        int sum = 0;
        for (int x : arr) {
            sum += x;
        }
        return (double) sum / (double) arr.length;
    }
}