Java核心知识:数组

简介

数组是一种容器,可以保存多个数据值。

特点:

1.数组是引用数据类型

2.数据中的多个数据,类型必须相同

3.数据长度在程序运行期间不可改变

创建数组

动态初始化

指定长度

格式:

数据类型[] 数组名称 = new 数据类型[数组长度];

左侧数据类型:是数组中保存的数据是什么类型

左侧中括号:代表我是一个数组

右侧的new:代表创建数组的动作

右侧数组类型:必须和左边的数据类型一致

数组长度:可以保存多少个数据

示例:

// 动态初始化
public class DynamicArray {
    public static void main(String[] args) {
        // 创建一个可以存放300个int类型数据的数组
        int[] arr1 = new int[300];

        double[] arr2 = new double[10];

        String[] arr3 = new String[20];
    }
}

静态初始化

指定内容

格式:

数组类型[] 数组名称 = new 数组类型[] {元素1, 元素2, ...}

// 省略格式
数组类型[] 数组名称 = {元素1, 元素2, ...}

例子:

/*
静态初始化数组
 */
public class StaticArray {
    public static void main(String[] args) {
        int[] arr1 = new int[] {5, 6, 7};

        String[] arr2 = new String[] {"hello", "world"};

        // 省略格式
        int[] arr3 = {1, 2, 3};
    }
}

注意:

1.虽然静态初始化没有直接告诉长度,但是可以根据后面的元素推算出来

2.动态初始化会给每个元素一个默认值,后面会再说

2.动态初始化和静态初始化可以拆分两个步骤,但是静态初始化使用省略格式就不能拆分了

/*
拆分写法
 */
public class SplitInitArray {
    public static void main(String[] args) {
        int[] arr1 = new int[300];
        // 等同于下面
        int[] arr2;
        arr2 = new int[300];

        int[] arr3 = new int[] {5, 6, 7};
        // 等同于下面写法
        int[] arr4;
        arr4 = new int[] {5, 6, 7};

    }
}

使用建议:如果不确定数组内容使用动态初始化,已经知道具体内容使用静态初始化。

数组操作

索引

数组是有顺序的,所以每个元素有一个索引,代表从左到右的位置,但是注意索引是从0开始的,也就是第一个元素的索引值是0。通过索引,就可以拿到数组指定位置的元素。

数组索引单位是0到数组长度-1,只能在这个范围索引,否则越界会报错。

public class Index {
    public static void main(String[] args) {
        int[] arr1 = {10, 20, 30, 40};

        System.out.println(arr1);

        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
        System.out.println(arr1[3]);

        System.out.println(arr1[4]);
        // Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
        // at Index.main(Index.java:12)
    }
}

修改元素

前面说过,在使用动态初始化时,会给每个元素一个初始值,初始值根据不同的数组类型也不同:

  • 整数类型,默认为0
  • 浮点类型,默认为0.0
  • 字符类型,默认为’\u0000’
  • 布尔类型,默认为false
  • 引用类型,默认为null

还可以通过索引来修改指定位置的元素:

public class Test {
    public static void main(String[] args) {
        int[] arr1 = {10, 20, 30, 40};
        System.out.println(arr1[0]);

        arr1[0] = 1;
        System.out.println(arr1[0]);

    }
}

数组长度

数组.length

/*
获取数组长度
 */
public class ArrayLength {
    public static void main(String[] args) {
        int[] arr1 = {10, 20, 30, 40};

        System.out.println(arr1.length);
    }
}

注意:

1.数组一旦创建,运行期间长度不可改变

数组遍历

/*
数组遍历
 */
public class ForEach {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3, 4, 5, 6};

        // 根据数组长度遍历数组
        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]);
        }

        System.out.println("---------");
        // 新语法
        for (int element:arr1) {
            System.out.println(element);
        }
    }
}

数组反转

public class ArrayReverse {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        
        // 开始反转
        for (int left = 0, right = arr.length - 1; left < right; left++, right--) {
            int tem = arr[left];
            arr[left] = arr[right];
            arr[right] = tem;
        }

        System.out.println("-----反转后-----");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

Arrays

是一个与数组有关的工具类,提供了大量的静态方法,实现数组相关操作。

toString(数组):将参数数组转为字符串

sort(数组):排序

asList(Object ... a):转为List(后面会讲解List)

copyOf(T [], int newLength):从一个数组获取指定长度的元素到新数组,从头开始计长度

copyOfRange(T [], int start, int end):获取一个数组范围内的数据,不包含末尾索引

import java.util.Arrays;
import java.util.List;


public class Test {
    public static void main(String[] args) {
        int[] arr1 = {10, 20, 30};

        // 把数组转为字符串
        String intStr = Arrays.toString(arr1);
        System.out.println(intStr);  // [10, 20, 30]

        // 数组排序
        int[] arr2 = {4, 12, 9};
        Arrays.sort(arr2);
        System.out.println(Arrays.toString(arr2));  // [4, 9, 12]

        List<String> list1 = Arrays.asList("a", "b", "c", "d");
        System.out.println(list1);
        int[] arr3 = Arrays.copyOf(arr1,2);
        System.out.println(Arrays.toString(arr3));
        int[] arr4 = Arrays.copyOfRange(arr1, 1, 3);
        System.out.println(Arrays.toString(arr4));

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan-running

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值