1-Java基础回顾整理_06_数组

1、数组介绍

  数组其实就是相同类型的有序集合。(关键字:相同类型、有序、集合)

  它有两种写法:

    1)int[] arrays:Java的默认写法,推荐首选

    2)int arrays[]:这个其实是C、C++的语法,只是早期为了让C、C++的程序员快速的熟悉Java语言才有了这种写法,不推荐使用。

2、Java内存分析

  Java的内存分为:堆、栈、方法区

    堆:是用来存放new出来的对象和数组;它可以被所有的线程共享,不会存放其他的对象引用;

    栈:用来存放基本变量类型(会包含这个变量的具体值);存放引用对象的变量(会存放这个引用对象在堆里面的具体地址)

    方法区:可以被所有线程共享;包含了所有的class(类)和static变量;

3、数组的默认值

  当数组被创建出来后,其实是有默认值的,默认值为0;  如:int[] arr = new int[10];  默认里面的元素都为0

4、数组的特点

  1)长度确定,数组一旦被创建出来,那么它的长度大小是不能改变的;

  2)数组中的所有元素数组类型都是相同的,(不然的话是无法进行存储的),有序的(有下标索引,存的时候按什么顺序存,就是什么样)

  3)数组中元素的类型可以使任意的,包括基本数据类型和引用数据类型,但是必须保持一致;

  4)数组整体可以看做一个变量,它本身是一个对象,数组中的每个元素相当于该对象本身的局部变量,因此不管它里面存的什么样类型的数据元素,数据对象本身都是在堆中的;

5、数组下标

  数组下标的合法区间:[0,length - 1],若下标越界,则会报数据下标越界异常:ArrayIndexOutofBoundException;

6、数组的遍历

  数组的遍历有两种方式:普通for循环、增强for循环

  实现数组的遍历反转输出所有元素:自己写一个反转的方法

    public static int[] reverse(int[] array){

      int[] result = new int[array.length];

      for(int i = 0, j = array.length; i < array.length; i ++, j --){

        result[ j ] = array[ i ];

      }

      return result;

    }

7、Arrays工具类

  首先通过查看源码,我发现Atrrays工具类里面的方法都是有static修饰符的,所以它才可以直接通过类名.方法名()来进行调用,不需要通过创建对象的方式来调用方法;

  Arrays工具类常用的功能方法:

    1)给数组赋值:file(),如果里面不添加任何条件,使用此方法后会默认进行全部填充和替换,默认元素为0;可以通过制定开始下标,结尾下标,填充元素来自定义填充;

    2)数组排序:sort(),给数组里面的元素进行排序操作,升序排列;

    3)数组比较:equals(),比较数组里面的元素是否相等;

    4)查找数组元素:binarySearch(),对排序好的数组进行二分查找操作;

8、冒泡排序

  一共有8中排序,主要是在数据结构中涉及,包括:直接插入排序、希尔排序、直接选择排序、快速排序、堆排序、冒泡排序、归并排序、基数排序 8种

  冒泡排序的本质:

    有2层循环,外层循环冒泡的轮数,内层用来依次进行元素的大小比较

    如:public int[] numSort(int[] array){

        int temp = 0;

        for(int i = 0; i < array.length-1; i ++){

          for(int j = 0; j < array.length - 1 - i; j ++){

            if(array[j + 1] < array[j]){

              temp = array[j + 1];

              array[j + 1] = array[j];

              array[j] = temp;

            }

          }

        }

        return array;

      }

      main(){

        int[] arrays = {1,3,2,17,19,13,15,47,89,53};

        numSort(arrays).sout;

      }

  冒泡排序的优化:因为我们发现,即使当传入的数组是有序的,还是依然会进行比较排序操作; 

      public int[] numSort(int[] array){

        int temp = 0;

        boolean flag = false;

        for(int i = 0; i < array.length-1; i ++){

          for(int j = 0; j < array.length - 1 - i; j ++){

            if(array[j + 1] < array[j]){

              temp = array[j + 1];

              array[j + 1] = array[j];

              array[j] = temp;

              flag = true;

            }

          }

        }

        if(flag = false){

          break;

        }

        return array;

      }

9、稀疏数组

  它是一种数据结构,本质是一个二维数组,因为它的里面要用来存放值;

  介绍:

    1)当一个二维数组中的大部分元素为0,或者为同一值时,可以使用稀疏数组来保存数组(起到一定的压缩作用)

    2)处理方式:

      ①记录数组中有几行、几列、多少个不同的值;

      ②把具有不同值元素的行、列及对应的值记录在一个小规模的数组中,从而缩小程序的规模,达到压缩的作用。

原文地址:https://www.cnblogs.com/hand-blog/p/13097282.html