JAVA中的数组(一维数组和二维数组)

介绍数组

  • Java 中的数组是用来存储固定大小的同类型元素。
  • 数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
  • 数组属引用类型,数组型数据是对象,数组中的每个元素相当于该对象的成员变量。
  • 数组是多个相同类型数据的组合,实现对这些数据的统一管理。
  • 数组主要解决多变量多数据存储的问题,方便程序后期统一维护操作数据。
  • 数组就是一系列空间大小相等且地址连续的一片存储空间。
  • 数组变量存的就是数组在堆内存中首元素的地址。
  • 数组存在于堆内存中,但凡在堆内存中存储的数据都称之为对象,但凡在堆内存中创建的对象都会有默认初始值,整数类型默认0,浮点类型默认0.0,布尔类型默认false,引用数据类型(对象)默认null.

 

声明数组

 

  • 元素类型[] 数组名; // 建议使用的方式

  • 元素类型 数组名[]; 

int[] score = null;  // null表示引用数据类型的默认值
int socre[] = null;  

  注意:

  • 首先必须声明数组变量,才能在程序中使用数组。
  • “数组名”是用来统一这组相同数据类型的元素的名称,建议使用有意义的名称为数组命名。

 

 

开辟空间

数组名 = new 元素类型[元素的个数];
score = new int[3];

     如图所示:

 

注意:

     数组操作中,在栈内存中保存的永远是数组的名称,只开辟了栈内存空间数组是永远无法使用的,必须有指向的堆内存才可以使用,要想开辟新的堆内存则必须使用new关键字,之后只是将此堆内存的使用权交给了对应的栈内存空间,而且一个堆内存空间可以同时被多个栈内存空间指向,即:一个人可以有多个名字,人就相当于堆内存,名字就相当于栈内存
 

 

 

数组的初始化(创建数组时必须明确规定大小或内容)

元素类型 数组名 = new 元素类型[数组大小];
元素类型 数组名[] = new 元素类型[]{1,2,3,4};
元素类型 [] 数组名={值0,值1,值2....}
int[] score = new int[10];
double[]myList=new double[10];
double []myList={1.9,2.9,3.4,3.5};

      在Java中,由于整数数据类型所占用的空间为4个bytes,而整型数组score可保存的元素有10个,所以上例中占用的内存共有4 * 10 = 40个字节。

 

 

public class ArrayTest {
    public static void main(String[] args) {
         // 对各元素进行初始化,但没有赋值。
        String[] stringArray = new String[3]; // 各元素的值默认为String类型的初始值null
        // 数组没有length()这个方法,有length的属性。
        for (int i = 0; i < stringArray.length; i++) {
            System.out.println(stringArray[i]);  // null null null
        }
    }
}
数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。

 

 

数组中元素的表示方法

     Java的数组索引编号由0开始,以一个的score[10]的整形数组为例,score[0]代表第1个元素,score[1]代表第2个元素,score[9]为数组中第10个元素(也就是最后一个元素).数组通过角标来访问元素的具体计算方式是 所要访问数据的地址=首元素地址+角标*数据类型大小

     注意:数组下标越界的错误提示:java.lang.ArrayIndexOutOfBoundsException。NullPointerException 空指针异常.

 

 

数组的基本操作

     1.使用随机数初始化数组

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

     2.显示数组

for(int i=0;i<myList.length;i++){
    System.out.print(myList[i]+" ");
}

     3.对所有元素求和

double total=0;
for(int i=0;i<=myList.length;i++){
    total+=myList[i];
}

     4.找出最大元素

double max =myList[0];
for(int i=1;i<myList.length;i++){
    if(myList[i]>max){
        max=myList[i];
    }
}

     5.找出最大元素的最小下标值

double max =myList[0];
int indexOfMax=0;
for(int i=1;i<myList.length;i++){
    if(myList[i]>max){
        max=myList[i];
        indexOfMax=i;
    }
}

 

数组的查找操作(线性查找,二分查找)

1.二分查找

public static void binarySearch(){
        /* 
        最好情况 查46 1次就出来了
        最坏情况 查12/60 O(logn)
        */
        int[] arr={12,17,21,32,38,41,46,49,50,50,51,59,60};
        int key=46;
        int index=-1;
        int min_index=0;
        int max_index=arr.length-1;
        int mid_index=(min_index+max_index)/2;
        while(arr[mid_index]!=key){
            if(key<arr[mid_index]){
                max_index=mid_index-1;
            }
            if(arr[mid_index]<key){
                min_index=mid_index+1;
            }
            if(min_index>max_index){
                index=-1;
                break;
            }
            mid_index=(min_index+max_index)/2;
        }
        System.out.println(mid_index);

    }

注意:二分查找有个前提 数组必须有序

 

2.线性查找

public static void linearSearch(){
        /* 
        最好情况 查10 1次就出来了
        最坏情况 查5  10次才出来
        当数组的长度越大的话 最坏情况越差
        时间复杂度(最坏情况) O(n) 线性阶
        */
        int[] arr={10,2,8,3,1,6,4,7,9,5};
        int key=11;
        int index=-1;   //key元素不存在
        for(int i=0;i<arr.length;i++){
            if(arr[i]==key){
                index=i;
                break;
            }
        }
        System.out.println(index);
    }

 

 

二维数组

  • 就是一个由行和列组成的一个表格而已,矩阵Matrix.
  • 在矩阵中访问元素的的话,是根据元素的行角标和列角标所确定的。
  • 尤其对于二维数组而言,无非就是一个一维数组,只不过该一维数组中的每一个元素是另一个一维数组罢了!

 

二维数组中数据的存储:

这个图中共有四个数组,分别是matrix, matrix[0], matrix[1], matrix[2]。 matrix.length;表示二维数组的行数为三,matrix[1].length;表示二维数组中第二行数组的长度。

 

二维数组的创建

1.   int[][]  matrix=new int[3][4];---------------创建一个3行4列的二维数组,元素默认都是0

2.   int[][] matrix=new int[][]{ ---------------创建个指定元素的二维数组

       {1,2,3,4} ,

       {5,6,7,8} ,

       {9,10,11,12}

   };

3.   int[][] matrix={

       {1,2,3,4} ,

       {5,6,7,8} ,

       {9,10,11,12}

   };

4.   锯齿矩阵/二维数组

   int[][] matrix={

       {1,2,3,4} ,

       {5,6,7} ,

       {8,9},

       {10}

      };

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值