JavaSE----09.Java 数组

09.Java 数组

1、定义

  • 数组是相同类型数据的有序集合.
  • 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
  • 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.

2、基本特点

  • 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  • 元素必须是相同类型,不允许出现混合类型。
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
  • 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象。
  • Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

3、数组创建

  • 声明数组:

dataType[] arrayRefVar; // 首选的方法

dataType arrayRefVar[]; //

  • 创建数组:

arrayRefVar = new dataType[arraySize];

  • 数组变量的声明和创建可以用一条语句完成:
    dataType[] arrayRefVar = new dataType[arraySize];

  • 获取数组长度:
    arrays.length

案例(创建一个数组,并赋值,进行访问):

    public static void main(String[] args) {
        int[] nums = new int[5];
        nums[0] = 1;
        nums[1] = 2;
        nums[2] = 3;
        nums[3] = 4;
        nums[4] = 5;

        int sum = 0;
        // 计算所有元素的总和
        for (int i = 0; i < nums.length; i++) {
            sum = sum + nums[i];
        }
        System.out.println(sum);
    }
  • 静态初始化:
int[] a = {1,2,3};
  • 动态初始化:
int[] a = new int[2];
a[0]=1;
a[1]=2

4、多维数组

  • 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。
  • 多维数组的动态初始化(以二维数组为例):

type[][] typeName = new type[typeLength1][typeLength2];

案例:
int a[][] = new int[2][5];

4、 Arrays 类

  • 常用功能:
    • 给数组赋值:通过 fill 方法。
    • 对数组排序:通过 sort 方法,按升序。
    • 比较数组:通过 equals 方法比较数组中元素值是否相等。
    • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。

排序:

    public static void main(String[] args) {
        int[] nums = new int[5];
        nums[0] = 6;
        nums[1] = 3;
        nums[2] = 2;
        nums[3] = 5;
        nums[4] = 3;

        //打印数组
        System.out.println(Arrays.toString(nums));
        System.out.println("==================");
        //数组排序
        Arrays.sort(nums);
        System.out.println(Arrays.toString(nums));
        System.out.println("==================");
        //使用二分法查找,必须先对数组进行排序
        System.out.println("该元素的索引:"+Arrays.binarySearch(nums, 5));
        System.out.println("==================");
        //将2到4索引的元素替换为100,索引2,3的数
        Arrays.fill(nums, 2, 4, 100);
        System.out.println(Arrays.toString(nums));
    }

6、 常见排序算法

  • 冒泡排序算法的原理如下:
    • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的
      数。
    • 针对所有的元素重复以上的步骤,除了最后一个。
    • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
    public static void main(String[] args) {
        Bubble bubble = new Bubble();
        int[] array = {2, 5, 1, 6, 4, 9, 8, 5, 3, 1, 2, 0};
        int[] sort = bubble.sort(array);
        for (int num : sort) {
            System.out.print(num + "\t");
        }
    }
    
    public int[] sort(int[] array) {
        int temp = 0;
        // 外层循环,它决定一共走几趟 //-1为了防止溢出
        for (int i = 0; i < array.length - 1; i++) {
            //通过符号位可以减少无谓的比较,如果已经有序了,就退出循环
            int flag = 0;
            //内层循环,它决定每趟走一次
            for (int j = 0; j < array.length - i - 1; j++) {
                //如果后一个大于前一个,则换位
                if (array[j + 1] > array[j]) {
                    temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    flag = 1;
                }
            }
            if (flag == 0) {
                break;
            }
        }
        return array;
    }
  • 选择排序:是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
    public static void main(String[] args) {
        SelectSort selectSort = new SelectSort();
        int[] array = {2, 5, 1, 6, 4, 9, 8, 5, 3, 1, 2, 0};
        int[] sort = selectSort.sort(array);
        for (int num : sort) {
            System.out.print(num + "\t");
        }
    }

    public int[] sort(int arr[]) {
        int temp = 0;
        // 认为目前的数就是最小的, 记录最小数的下标
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                // 修改最小值的下标
                if (arr[minIndex] > arr[j]) {
                    minIndex = j;
                }
            }
            // 当退出for就找到这次的最小值,就需要交换位置了
            if (i != minIndex) {
                //交换当前值和找到的最小值的位置
                temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
            }
        }
        return arr;
    }

7、 稀疏数组


posted @ 2019-11-18 15:11  丫头的星星  阅读(165)  评论(0编辑  收藏  举报