您的位置 首页 java

三石说:java基础之数组

数组的定义

java数组就是线性表的定义,分配一段连续的空间用于存放数据。数组是比较简单的访问比较快。

数组的分类

一维数组

int [] a= new int[10] 分配连续的可存放元素个数为10的空间,

 public class main{
    public static void main(String[] args){
        int [] array = new int[10];
        array[1]=222;
        array[2]=333;
        System.out.println(array.length);
        ArrayList<Integer> list = new ArrayList<>();
        list.add(123);
        list.add(22);
        System.out.println(list);
    }
}  

看了一维的之后我们再看看多维数组

多维数组

以二维数组为例,二维数组的实质:数组的数组。数组中的每一个元素仍然是个数组。

逻辑上可看做二维,其实并不是二维的

 public void test(){
    // 这是个3行的但是列未定义。
    int[][] array= new int[3][];
    array[0] = new int[5]; // 第0行有5列 ,创建有5个整形变量的数组
    arry[1] = new int[4];
    array[2]= new int[3];
}  

数组的初始化

Java语言是典型的静态语言,因此Java的数组是静态的,即当数组被初始化之后,该数组的长度是不可变的。Java程序中的数组必须经初始化才可使用。所谓初始化,就是为数组对象的元素分配内存空间,并为每个数组元素指定初始值。数组的初始化有以下两种方式。

■ 静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。


■ 动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。不管采用哪种方式初始化Java数组,一旦初始化完成,该数组的长度就不可改变,Java语言允许通过数组的length属性来访问数组的长度。

指定初始值时,系统将按如下规则分配初始值。

■数组元素的类型是基本类型中的整数类型(byte、short、int和long),则数组元素的值是0

■数组元素的类型是基本类型中的浮点类型(float、double),则数组元素的值是0.0。

■数组元素的类型是基本类型中的字符类型(char),则数组元素的值是’u0000’。

■数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是false。

■数组元素的类型是引用类型(类、接口和数组),则数组元素的值是null。注意不要同时使用静态初始化和动态初始化。也就是说,不要在进行数组初始化时,既指定数组的长度,也为每个数组元素分配初始值。

Java的数组是静态的,一旦为数组初始化完成,数组元素的内存空间分配即结束,程序只能改变数组元素的值,而无法改变数组的长度。需要指出的是,Java的数组变量是一种引用类型的变量,数组变量并不是数组本身,它只是指向堆内存中的数组对象。因此,可以改变一个数组变量所引用的数组,这样可以造成数组长度可变的假象使用Java数组之前必须先初始化数组,也就是为数组元素分配内存空间,并指定初始值。实际上,如果真正掌握了Java数组在内存中分配机制,那么完全可以换一个方式来初始化数组,或者说,数组无需经过初始化。

始终记住:Java的数组变量是引用类型的变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中即可使用该数组变量

比如 :

 public class ArrayTest3
      {
          public static void main(String[] args)
          {
            //定义并初始化nums数组
            int[] nums=new int[]{3, 5, 20, 12};
            //定义一个prices数组变量
              int[] prices;
            //让prices数组指向nums所引用的数组
              prices = nums;
            for (int i=0 ; i < prices.length ; i++)
            {
                    System.out.println(prices[i]);
            }
            //将prices数组的第3个元素赋值为34
            prices[2]=34;
            //访问nums数组的第3个元素,将看到输出34
            System.out.println("nums数组的第3个元素的值是:"+nums[2]);
          }
      }
从图1  

常常说使用Java数组之前必须先进行初始化,可是现在prices变量却无需初始化,这不是互相矛盾吗?其实一点都都不矛盾。

这个例子最重要的一点指出了prices数组指向nums所引用的数组。内存模型如图所示

三石说:java基础之数组

关键是大部分时候,我们把数组变量和数组对象搞混了,数组变量只是一个引用变量(有点类似于C语言里的指针),通常存放在栈内存中(也可被放入堆内存中的);而数组对象就是保存在堆内存中的连续内存空间。对数组执行初始化,其实并不是对数组变量执行初始化,而是要对数组对象执行初始化—也就是为该数组对象分配一块连续的内存空间,这块连续内存空间的长度就是数组的长度。虽然上面程序中的prices变量看似没有经过初始化,但执行prices=nums;就会让prices变量直接指向一个已经执行初始化的数组。对于数组变量来说,它并不需要进行所谓的初始化,只要让数组变量指向一个有效的数组对象,程序即可正常使用该数组变量。

好了,关于数组的增加删除修改,都是通过数组的遍历进行实现的,我在这里就不再多介绍了,在下面我们可以自己尝试一下。

这就是今天要讲的数组的操作。

文章来源:智云一二三科技

文章标题:三石说:java基础之数组

文章地址:https://www.zhihuclub.com/174961.shtml

关于作者: 智云科技

热门文章

网站地图