Java的数组

Java的数组

  1. 数组声明创建

  2. 数组使用

  3. 多维数组

  4. Arrays类(专门用来操作数组的类)

  5. 稀疏数组(用来压缩数组,使其便于保存,减少空间容量)

数组的声明创建

  1. 声明数组变量,语法为: 数据类型[ ] 数组名; (首选)

  2. C++声明数组变量,语法为: 数据类型 数组名[ ];(虽然也可以,但是不是首选)。

    int[] nums;     //这只是声明了一个数组,但未分配空间
  3. Java使用new操作符创建数组,语法为: 数据类型[ ] 数组名 = new 数据类型[数组长度];(1是声明,3是创建)

    int[] nums = new int[5];    //声明,并创建了数组。分配了一个能放5个int数据的空间
  4. 获取数组长度:数组名.length

  5. 给数组元素赋值

    nums[0] = 2;

Java内存分析

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

  1. 堆:

    1.1. 存放new的对象和数组。

    1.2. 可以被所有的线程共享,不会存放别的对象引用。

  2. 栈:

    2.1. 存放基本变量类型(包含这个基本变量类型的具体数值)。

    2.2. 引用对象的变量(会存放这个引用在堆里面的具体地址)。

  3. 方法区:

    3.1. 可以被所有的线程共享

    3.2. 包含了所有的class和static变量。

 

三种初始化方式

静态初始化、动态初始化、默认初始化

  1. 静态初始化:

    int[] a = {1,2,3};
  2. 动态初始化:

    int[] a = new int[2];
  3. 默认初始化:

    数组一旦被创建,自己不初始化,Java也会自动初始化。

    3.1. 基本数据类型中,整数型:0                ------4个

    3.2. 基本数据类型中,浮点型:0.0             ------2个

    3.3. 基本数据类型中,布尔型:false          ------1个

    3.4. 基本数据类型中,字符型(char):空白 ------1个

    3.5. 引用数据类型中,String:null

public class HelloWorld {
   public static void main(String[] args) {
       //基本类型中的整数型
       byte[] array1 = new byte[1];
       short[] array2 = new short[1];
       int[] array3 = new int[1];
       long[] array4 = new long[1];
       //基本类型中的浮点型
       float[] array5 = new float[1];
       double[] array6 = new double[1];
       //基本类型中的布尔型
       boolean[] array7 = new boolean[1];
       //基本类型中的字符型
       char[] array8 = new char[1];
       //引用数据类型String
       String[] array9 = new String[1];
       System.out.print("基本类型中的整数型:" + "\t" + array1[0] +"\t"+ array2[0] +"\t"+ array3[0] +"\t"+ array4[0] +"\n");
       System.out.print("基本类型中的浮点型:" + "\t" + array5[0] +"\t"+ array6[0] +"\n");
       System.out.println("基本类型中的布尔型:" + array7[0]);
       System.out.println("基本类型中的字符型:" + array8[0]);
       System.out.println("引用类型中的String:" + array9[0]);
  }
}

输出:

基本类型中的整数型: 0 0 0 0

基本类型中的浮点型: 0.0 0.0

基本类型中的布尔型:false

基本类型中的字符型:

引用类型中的String:null

数组的增强for循环

可以省略下标,语法为:

public class HelloWorld {
   public static void main(String[] args) {
       int[] arrays = new int[3];
       arrays[0] = 1;
       arrays[1] = 2;
       arrays[2] = 3;
       for (int array:arrays){
           System.out.println(array);
      }
  }
}

输出:1, 2, 3

往方法中传数组

public static int max(int[] arrays) {}

举例:写个方法,输出数组中最大元素:

public class HelloWorld {
   public static void main(String[] args) {
       int[] arrays = {1, 2, 3};
       System.out.println("最大元素为:" + max(arrays));
  }

   public static int max(int[] arrays) {
       int max_num = arrays[0];
       for (int array : arrays) {
           if (array > max_num) {
               max_num = array;
          }
      }
       return max_num;
  }
}

输出:最大元素为:3

方法中,返回值是数组

举例:写个方法,把输入的数组反转,并输出数组:

与此同时,注意下for循环中,写两个变量的方法,语法为:

public class HelloWorld {
   public static void main(String[] args) {
       int[] arrays = {1, 2, 3};
       int[] new_arrays = reverse(arrays);
       for (int x : new_arrays) {
           System.out.print(x + "\t");
      }
  }
   public static int[] reverse(int[] arrays) {
       int[] new_arrays = new int[arrays.length];
       for (int i = 0, j = arrays.length - 1; i < arrays.length; i++, j--) {
           new_arrays[j] = arrays[i];
      }
       return new_arrays;
  }
}

输出:3 2 1

多维数组+增强for循环

多维数组:数组的数组

增强for循环: for (int[] x : arrays) {}

public class HelloWorld {
   public static void main(String[] args) {
       int[][] arrays = {{1,2},{3,4}, {5,6}};  //3行,2列
       for (int[] x : arrays) {
           for (int y:x)
           System.out.print(y + "\t");
      }
  }
}

 输出:1 2 3 4 5 6

 

Arrays类

  1. Arrays类是数组的工具类,在java.util.Arrays

  2. 可以通过JDAK的帮助文档,看Arrays中各种方法的使用说明。

     

  3. Arrays类中的方法都是static修饰的静态方法,可使用类名进行调用。

  4. 常用功能:

    4.1. 给数组赋值:fill(),可以指定第几个到第几个被填充(或覆盖),指定1-3的话,就是第1和2被覆盖了。

    4.2. 对数组排序:sort(),按升序(数字越来越大)

    4.3. 比较数组:equal(),比较数组中元素值是否相等

    4.4. 打印数组:toString(),返回数组内容的字符串形式

    4.4. 查找数组元素:binarySearch()对排序好的数组进行二分查找法查找。import java.util.Arrays;


public class HelloWorld {
   public static void main(String[] args) {
       int[] arrays = {1, 6, 3, 8, 9, 2, 5, 4};
       Arrays.fill(arrays, 1, 3, 0); //数组第2到第3个元素被0覆盖
       System.out.println(Arrays.toString(arrays));  //输出:[1, 0, 0, 8, 9, 2, 5, 4]
       Arrays.sort(arrays);                          //升序排序
       System.out.println(Arrays.toString(arrays));  //输出:[0, 0, 1, 2, 4, 5, 8, 9]
       int[] new_arrays = {1, 6};
       System.out.println(Arrays.equals(arrays,new_arrays)); //比较数组是否相同。输出:false
       System.out.println(Arrays.binarySearch(arrays,8));  //得到元素8的索引。输出:6
  }
}

稀疏数组

  1. 当一个数组中大部分元素为0,或为同样数值时,可以采用稀疏数组来保存该数组。

  2. 稀疏数组的处理方式为:

    2.1. 记录数组一共几行几列,有多少个不同值

    2.2. 把具有不同值的元素和行列记录在一个小规模数组总,实现缩小数组规模的效果

  3. 图中,左边为原始数组,右边为稀疏数组。

    3.1. 原始数组6行7列,其中有效数字个数给8个。

    3.2. 这8个有效数字所在的:行、列、值记录下。

            

 

 

 

 

posted @ 2020-02-11 22:37  WZ_BeiHang  阅读(289)  评论(0)    收藏  举报