数组

数组

相同类型的有序集合

相同类型的若干个数据,按照一定的次序排列组合而成。

每个数组元素可以通过一个下标来访问他们。

数组的声明和创建

首先要声明数组变量,才能在程序中使用数组。

dataType[] arrayRefVar; //首选
dataType arrayRefVar[] //效果相同

要使用new关键字来创建数组

dataType[ ] arrayRefVar = new dataType[arraySize];

数组通过索引来访问,从0开始。

数组长度是array.Length

    int[] num1;//声明一个数组
      num1 = new int[10];//这里面可以存是个int类型数字
      num1[0] = 1 ;//给数组元素赋值
      num1[1] = 2 ;
      num1[2] = 3 ;
      num1[3] = 4 ;
      num1[4] = 5 ;
      num1[5] = 6 ;
      num1[6] = 7 ;
      num1[7] = 8 ;
      num1[8] = 9 ;
      num1[9] = 10 ;
      //计算所有元素的和
      int sum = 0;
      for (int i = 0; i < num1.length; i++) {
          sum = sum+num1[i];
      }
      System.out.println(sum);

 

内存分析

数组声明的时候并不会存放在堆里面,只有创建的时候才会在堆里面。

一般声明和创建都写在一起

dataType[] arrayRefVar = new dataType[arraysize];

三种初始化

静态初始化 动态初始化 默认初始化()
        //静态初始化:创建 + 赋值
      int[] a = {1,2,3,4,5};
      //动态初始化:包含默认初始化
      int[] b=new int[10];
      b[0] = 10;
       

 

数组的四个基本特点

长度确定。一旦被创建,大小不可以改变。

所有元素是相同的类型。

数组中的元素可以是任何数据类型,包括基本类型和引用类型。

数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,java中的对象实在堆中的,数组不管保存什么对象类型都是保存在堆中的。

数组边界

下表的合法区间:[0,array.Length-1] 超过这个区间就会报错

小结:

数组是相同数据类型的有序结合

数组就是对象。数组元素相当于对象的成员变量。

数组的长度是确定的,不可变的。如果越界就会报数组下标越界异常的错误。

数组的使用

for-each循环

        int[] arrays = {1,2,3,4,5};
      //JDK1.5才有 没有下标
      for (int array : arrays) {
          System.out.println(array);

      }
        //打印数组元素

  }   public static void printArray(int[] arrays)
  {
      for (int i = 0; i < arrays.length; i++) {
          System.out.println(arrays[i]+" ");
      }
  }
       //反转数组
  public static int[] reverse(int[] arrays)
  {
      int[] result = new int[arrays.length];
      for (int i = 0,j=arrays.length-1; i < arrays.length; i++,j--)
      {
          result[j] = arrays[i];


      }
      return result;

  }

多维数组

二维数组

int a[][] = new int[2][6];
        //[4][2]
      int[][] array = {{1,2},{3,4},{5,6},{6,7}};
      System.out.println(array[0][0]);
      System.out.println(array[0][1]);
      for (int i = 0; i < array.length; i++) {
          for (int j = 0;j < array[i].length;j++)
          {
              System.out.println(array[i][j]);
          }

      }

Arrays类

        int[] a = {9001,222,432,1234,53453,12124};
      //System.out.println(Arrays.toString(a));
      //printArray(a);
      Arrays.sort(a);//升序排序
      Arrays.fill(a,10);//数组填充
      System.out.println(Arrays.toString(a));

自己写一个打印方法

        for (int i = 0; i < a.length; i++) {
          if (i == 0)
          {System.out.print("["+a[i]+",");}
          else if(i == a.length-1)
          {
              {System.out.print(+a[i]+"]");}
          }
          else {
              System.out.print(a[i] + ",");
          }
      }

冒泡排序

两层循环,外层是轮数,里层依次比较。

        for (int i = 0; i < array.length - 1; i++) {
          for (int j = 0;j < array.length - 1;j++)
          {
              if (array[j]>array[j+1])
              {
                  int m = 0;
                  m = array[j];
                  array[j] = array[j+1];
                  array[j+1] = m;
              }
          }
      }

稀疏数组

一个数组中大部分元素为0,或者值相同,可以用稀疏数组来保存数组。

 //创建一个稀疏数组的数组
      int[][] array2 = new int[sum+1][3];
      array2[0][0] = 11;
      array2[0][1] = 11;
      array2[0][2] = sum;
              //存入稀疏数组
      for (int i = 0; i < 11 ; i++) {
          for (int j = 0,k = 1; j < 11; j++,k++) {
              if (array[i][j]!=0)
              {
                  array2[k][1] = i;
                  array2[k][2] = j;
                  array2[k][3] = array[i][j];

              }


          }

 

posted @ 2020-06-02 17:08  noblehacker  阅读(118)  评论(0)    收藏  举报