数组


数组

  1. 数组的诞生 - 为了解决单个变量只能存储单个值的缺点.
  2. 数组本身也是属于数据结构[数组,栈,堆,树[红黑树],链表,图…]
  3. 数组是属于对象类型,数组是存在在JVM内存的堆区,基本类型存储在JVM内存的栈区
  4. 数组在内存中一定是一块连续的空间.
  5. 数组的大小[长度,数组中存放的数据的个数]一旦确定了,不能改变.
  6. 定义数组必不可少的俩个条件 - 元素类型/数组的长度要确定
  7. 数组容器

语法

1. 元素类型[] 变量名 = new 元素类型[size];//size数组的大小
2. 元素类型 变量名[] = new 元素类型[size];//

元素类型就是数据类型[8种基本数据类型,以及对象类型]
作用 - 元素类型决定了这个数组中可以存放的数据的类型

//arr的数据类型是什么?int[] -> 整数型数组
// "定义一个长度为3的int型数组"
int[] arr = new int[3];

赋值方式

如果定义了数组,但是没有进行赋值操作,那么系统会默认分配一个默认值

默认值根据元素类型来决定了.

byte,short,int,long -> 0

float,double -> 0.0

boolean -> false

char -> 空格

对象类型 -> null

  1. 先定义数组,然后通过下标一一赋值

    int[] arr = new int[3];
    //数组的下标从[0,数组长度-1]范围
    //如果下标不在此范围,控制台抛出java.lang.ArrayIndexOutOfBoundsException 数组下标越界异常
    arr[0] = 10;
    arr[1] = 10;
    arr[2] = 10;
    
  1. 定义数组的同时进行赋值

    int[] arr = {3,4,5};
    
  2. 定义数组的同时进行赋值

    int[] arr = new int[]{3,4,5};
    
  3. 通过普通for去赋值

    int[] arr = new int[3];
    for(int i=0;i<arr.length;i++){
      arr[i] = (int)(Math.random()*100+1);
    }
    

数组的遍历

  1. 通过下标一一取值

    System.out.println(arr[下标]);
    
  2. 数组提供了属性length - 获取数组的长度

    通过普通for循环进行遍历

    for (int i = 0; i < arr.length; i++) {
      System.out.println(arr[i]);
    }
    
  3. 使用jdk5.x提供的增强for循环的语法

    属于只读的for

    int[] arr2 = {3,4,5};
    for(元素类型 元素变量:数组变量名){
      System.out.println(元素);
    }
    for(int e:arr2){//此处的e不是代表下标,就是代表真正的元素
       System.out.println(e);
    }
    
  1. 通过java.util.Arrays数组工具类中提供的static String toString(数组对象)来遍历数组

拓展 - 数组的内存

//通过new关键字在Jvm的堆中开辟新的空间01,用来存储这个对象{10,20,30}
//然后将这个对象在堆空间中的内存地址赋值给了引用变量arr1[存储在栈]
//"结论" - arr1的本质不是对象,只是一个引用变量而已
//"结论" - 引用和对象之间的关系
//        引用变量中存储的就是对象在堆空间中的内存地址
//        "气球理论" - 一个引用变量在同一个时刻,只能指向一个对象
//                 - "一个对象可以在同一个时刻被多个引用指向"
int[] arr1 = new int[]{10,20,30};

//通过new关键字在Jvm的堆中开辟新的空间02,用来存储这个对象{10,20,30}
int[] arr2 = {10,20,30};

arr1 = arr2;//arr1和arr2都是指向第二次创建出来的数组对象
                      //原来第一次创建出来的对象就成为内存中的垃圾对象 - GC[垃圾回收线程进行回收,释放内存]
                      //"垃圾对象" - 没有任何引用指向的对象

拓展 - 方法的参数传递方式

  1. 基本类型采用值传递
  2. 对象类型[引用类型]采用地址传递

总结:**Java中只有值传递,没有地址传递.**比较特殊的是String类型[虽然是一个对象类型,但是具备基本类型传递的特点]

数组工具类

java.util.Arrays

  1. static String toString(int[] arr);//输出数组

  2. static int[] copyOf(int[] original, int newLength)
    复制指定的数组,用零截取或填充(如有必要),以便复制具有指定的长度。

  3. static void fill(boolean[] flag,boolean value);//给数组赋统一的值.


文章作者: 码农耕地人
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 码农耕地人 !
  目录