JAVA基础之数组

1.数组定义

1.1数组语法和定义

数组是可以在内存中连续存储多个元素的结构,用于存储同一类型数据的集合,其实数组就是一个容器。
语法:
数据类型[] 数组名 = new 数据类型[元素个数或数组长度]
数据类型 数组名[] = new 数据类型[元素个数或数组长度]
数组属于引用数据类型,在使用数组时,我们需要声明数组,初始化数组,初始化数组后,数组长度固定,数组也有了初始值。当存储的是java基本数据类型时,默认值是不同基本数据类型值的默认值;当是引用类型时,如果我们没有指定具体的对象,则他的默认值是null。

1.2内存地址

通过demo和内存图来讲解。
demo:

int[] x;              // 声明一个int[]类型的变量
x = new int[100];   // 创建一个长度为100的数组

第一行代码 int[] x; 声明了一个变量x,该变量的类型为int[],即一个int类型的数组。变量x会占用一块内存单元,它没有被分配初始值。内存中的状态如下图所示。
这里写图片描述
第二行代码 x = new int[100]; 创建了一个数组,将数组的地址赋值给变量x。在程序运行期间可以使用变量x来引用数组,这时内存中的状态会发生变化,如下图所示。
这里写图片描述

1.2二维数组/多维数组

二维数组或多维数组也就是说数组中存储的元素为数组,所谓的多维数组其实就是一维数组的延伸、只是数组的值存放的是另一个数组的引用、依次深入、我们可以扩展到任意维度的数组。
语法:
数据类型[] [] 数组名 = new 数据类型[数组1的长度] [数组1中数组2的长度]
二维数组定义方式:

1.
int[][] arr = new int[3][4];

上面的代码相当于定义了一个3*4的二维数组,即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组,接下来通过一个图来表示这种情况,如下图所示。
这里写图片描述

2.
int[][] arr = new int[3][];

第二种方式和第一种类似,只是数组中每个元素的长度不确定,接下来通过一个图来表示这种
这里写图片描述

3.
int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};

上面的二维数组中定义了三个元素,这三个元素都是数组,分别为{1,2}、{3,4,5,6}、{7,8,9},接下来通过一个图来表示这种情况
这里写图片描述
对二维数组中元素的访问也是通过角标的方式,如需访问二维数组中第一个元素数组的第二个元素,具体代码如下:

arr[0][1];

2.数组初始化

2.1数组静态初始化

静态初始化:数组大小由系统分配、我们只为数组每个位置上赋值
语法:
1、数据类型[] 数组名 = new 数据类型[]{元素,元素,……};
2、数据类型[] 数组名 = {元素,元素,元素,……};
demo:


 1public class ArrayDemo {
 2  public static void main(String[] args) {
 3      int[] arr = { 1, 2, 3, 4 }; // 静态初始化
 4      // 下面的代码是依次访问数组中的元素
 5      System.out.println("arr[0] = " + arr[0]);
 6      System.out.println("arr[1] = " + arr[1]);
 7      System.out.println("arr[2] = " + arr[2]);
 8      System.out.println("arr[3] = " + arr[3]);
 9  }
 10}

运行结果:
这里写图片描述
代码才用静态初始化的方式为数组的每个元素赋值,分别为1,2,3,4。

2.2数组动态初始化

动态初始化:只指定数值的大小,数组的初始值由系统自动赋值
语法:
数据类型[] 数组名 = new 数据类型[元素个数或数组长度]
二维数组取值的demo:

class ArrayDemo {
    public static void main(String[] args){

        //定义二维数组的方式
        int[][] arr = new int[3][4];

        System.out.println( arr );
        System.out.println("二维数组的长度: " + arr.length);
        //获取二维数组的3个元素
        System.out.println( arr[0] );
        System.out.println( arr[1] );
        System.out.println( arr[2] );

        System.out.println("打印第一个一维数组的元素值");
        System.out.println( arr[0][0] );
        System.out.println( arr[0][1] );//访问的为二维数组中第1个一维数组的第2个元素
        System.out.println( arr[0][2] );
        System.out.println( arr[0][3] );

        System.out.println("打印第二个一维数组的元素值");
        System.out.println( arr[1][0] );
        System.out.println( arr[1][1] );
        System.out.println( arr[1][2] );
        System.out.println( arr[1][3] );

        System.out.println("打印第三个一维数组的元素值");
        System.out.println( arr[2][0] );
        System.out.println( arr[2][1] );
        System.out.println( arr[2][2] );
        System.out.println( arr[2][3] );
    }
}

运行结果:
这里写图片描述
动态初始化二维数组,初始化后的元素默认值为0。

3.数组常见异常

3.1数组越界异常

每个数组的索引都会有一个范围0-length-1。在访问数组元素时,索引不能超过这个范围,否则程序会报错。
demo:

 1public class ArrayDemo {
 2  public static void main(String[] args) {
 3      int[] arr = new int[4]; // 定义一个长度为4的数组
 4      System.out.println("arr[0]=" + arr[4]); // 通过下标4访问数组元素
 5  }
 6}

运行结果:
这里写图片描述
可以从图中看出错误信息为:异常ArrayIndexOutOfBoundsException,出现这个异常信息的原因是,数组长度为4的数组,索引为0-3。代码中用下标4来访问元素超出了索引范围。

3.2空指针异常

在使用变量引用一个数组时,变量必须指向一个有效的数组对象,如果该变量为null,则意味着没有指向任何数组,此时通过该变量访问数组的元素会出现空指针异常。
demo:

 1public class ArrayDemo {
 2  public static void main(String[] args) {
 3      int[] arr = new int[3]; // 定义一个长度为3的数组
 4      arr[0] = 5; // 为数组的第一个元素赋值
 5      System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
 6      arr = null; // 将变量arr置为null
 7      System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
 8  }
 9}

运行结果:
这里写图片描述
可以从图中看出错误信息为:异常NullPointerException,代码中4,5行代码都可以通过变量arr正常的操作数组,第六行代码设置为null,当第七行代码再次访问数组时就出现了空指针异常NullPointerException。

4.数组常用方法

1.Arrays.sort(数组名):

对数组元素进行排序。

2.Arrays.binarySearch(数组名,查找元素的索引)

数组元素定位查找。

3.Arrays.toString(数组名)

转字符串

4.ArrayUtils.addAll(数组1,数组2)

合并两个数组

5.ArrayUtils.removeElement(数组名,删除元素的索引)

删除数组元素

6.Arrays.equals(数组1, 数组2)

比较两个一维数组是否相等


另外常用的方法为数组和集合类型的转换或者使用

1.根据数组创建ArrayList
String[] stringArray = { "a", "b", "c", "d", "e" };
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));
// [a, b, c, d, e]
System.out.println(arrayList);
2.将ArrayList转换为数组
String[] stringArray = { "a", "b", "c", "d", "e" };
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));//根据数组创建ArrayList
String[] stringArr = new String[arrayList.size()];
arrayList.toArray(stringArr);//通过toArray将list转为数组
3.将数组转换为Set
String[] stringArray = { "a", "b", "c", "d", "e" };
Set<String> set = new HashSet<String>(Arrays.asList(stringArray));

5.数组遍历

这里直接用demo看一下一维数组和二维数组的遍历

class ArrayDemo {
    public static void main(String[] args){
        //一维数组的求累加和并遍历
        int[] arr = {10,20,30,40,50};
        int sum = 0; 
        for (int i=0; i<arr.length; i++) {
              //System.out.println(arr[i]);
            sum += arr[i];
        }
        System.out.println("sum= " + sum);
        System.out.println("---------------------");

//二维数组的求累加和并遍历
        int[][] arr2 = { {1,2},{3,4,5},{6,7,8,9,10} };
        int sum2 = 0;
        for (int i=0; i<arr2.length; i++) {
            for (int j=0; j<arr2[i].length; j++) {
                 //System.out.println(arr2[i][j])
                sum2 += arr2[i][j];
            }
        }
        System.out.println("sum2= "+ sum2);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值