基础数据结构------数组(Array)

数组的特点:

1.数组中的每个元素都具有相同的类型。

2.数组的大小在创建时已经确定,不能动态调整大小。

3.数组可以存储基本数据类型和对象类型。

下面是一个存储对象类型的例子:

假设有一个学生类Student,该类有两个属性name和age,示例代码如下:

public class Student {
    private String name; // 学生姓名
    private int age; // 学生年龄

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 省略getter和setter方法
}

现在,可以定义一个Student类型的数组来存储多个学生对象,示例代码如下:

Student[] students = new Student[3]; // 定义一个学生类型的数组,长度为3

students[0] = new Student("Tom", 18); // 创建一个学生对象,并将该对象存储到数组中
students[1] = new Student("Jerry", 19);
students[2] = new Student("Alice", 20);

for (int i = 0; i < students.length; i++) {
    System.out.println(students[i].getName() + " " + students[i].getAge()); // 输出每个学生对象的姓名和年龄
}

一维数组:

在Java中,声明一个数组需要指定数组的类型和大小。

以下是声明和初始化一个整数数组的示例:

int[] arr = new int[10]; // 创建一个包含10个整数的数组

可以通过下标来访问数组中的元素。数组的下标从0开始,最大下标为数组长度减1。以下是访问数组元素的示例:

arr[0] = 1; // 将第一个元素赋值为1
arr[1] = 2; // 将第二个元素赋值为2
int value = arr[0]; // 获取第一个元素的值

在Java中,数组还有一些内置的方法,可以方便地操作数组。以下是一些常用的数组方法:

1.length 属性:

获取数组的长度,即数组中元素的个数。

int[] arr = new int[10];
int len = arr.length; // len的值为10
2.fill方法:

将数组中的每个元素都赋值为指定的值。

int[] arr = new int[10];
Arrays.fill(arr, 0); // 将数组中的每个元素都赋值为0
 3.sort 方法:

将数组中的元素按升序排序。

int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
Arrays.sort(arr); // 将数组中的元素按升序排序
 4.binarySearch 方法:

在已排序的数组中查找指定元素的位置。

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int index = Arrays.binarySearch(arr, 5); // index的值为4,即元素5在数组

多维数组:

当我们需要处理多个维度的数据时,多维数组就是一种非常有用的数据结构。在Java中,多维数组是由多个一维数组组成的。以下是一些关于多维数组的使用建议:

      1.声明和初始化方式

int[][] arr = new int[3][4]; // 创建一个3行4列的二维数组

      2.多维数组的访问方式

在访问多维数组时,需要使用多个下标来指定元素的位置。下标的个数等于数组的维度数,下标的范围从0开始,最大下标为数组长度减1。以下是访问二维数组元素的示例:

int[][] arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int value = arr[1][2]; // 获取第2行第3列的元素,即值为6

    3.将多维数组看成一维数组

在使用多维数组时,可以将其看成一维数组,使用一维下标来访问元素。Java中的多维数组实际上是由一维数组组成的,因此可以使用一维下标来访问元素。以下是将二维数组看成一维数组的示例:

int[][] arr = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int row = 1, col = 2;
int value = arr[row * arr.length + col]; // 获取第2行第3列的元素,即值为6

   4.注意内存消耗

多维数组的内存消耗往往比一维数组要大。在使用多维数组时,要注意数组的大小和内存消耗,避免出现内存溢出的问题。

   5.将多维数组拆分成多个一维数组

在一些情况下,将多维数组拆分成多个一维数组可以提高程序的性能。这是因为一维数组在内存中是连续存储的,可以更快地访问和操作。

总之,要熟练地使用多维数组,需要掌握多维数组的声明和初始化方式,了解多维数组的访问方式,以及注意多维数组的内存消耗。在实际编程中,还可以将多维数组拆分成多个一维数组来提高程序的性能。

数组的常见操作

1.数组的复制

在Java中,可以使用Arrays类的copyOf方法来复制数组。该方法会创建一个新的数组,并将原数组中的元素复制到新数组中。

int[] arr1 = {1, 2, 3};
int[] arr2 = Arrays.copyOf(arr1, arr1.length); // 复制数组 arr1 到 arr2

 2.数组的拼接

ArrayList是Java中提供的动态数组类,支持动态扩容,可以更方便地进行数组拼接操作。

ArrayList类提供了add方法用于向数组末尾添加元素,还提供了addAll方法用于将另一个集合中的所有元素添加到数组末尾。因此,可以通过创建一个空的ArrayList对象,将数组添加到该对象中,再将另一个数组添加到该对象中,最后将ArrayList转换为数组,完成数组拼接操作。

int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6, 7};

ArrayList<Integer> list = new ArrayList<>(); // 创建空的ArrayList对象
for (int num : arr1) {
    list.add(num); // 将arr1中的元素添加到ArrayList中
}
for (int num : arr2) {
    list.add(num); // 将arr2中的元素添加到ArrayList中
}

int[] newArr = list.stream().mapToInt(i -> i).toArray(); // 将ArrayList转换为数组

3.数组的转换

在Java中,可以使用Arrays类的asList方法将数组转换成List集合。该方法返回的是一个只读的List集合,不能修改其中的元素。以下是将数组转换成List集合的示例: 

Integer[] arr = {1, 2, 3};
List<Integer> list = Arrays.asList(arr); // 将数组 arr 转换成 List 集合

 4.数组的遍历

在Java中,可以使用for循环或增强型for循环来遍历数组。以下是遍历数组的示例:

int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}
for (int element : arr) {
    System.out.println(element);
}

 动态数组

ArrayList是Java中提供的动态数组类,它实现了List接口,可以存储一组有序的元素,并可以动态调整数组的大小。ArrayList是基于数组实现的,因此支持快速随机访问元素,同时还支持在数组末尾添加和删除元素。

下面是ArrayList的一些常用方法:

1.add方法:

用于向数组末尾添加元素。可以使用add方法添加单个元素,也可以使用addAll方法添加另一个集合中的所有元素。

ArrayList<Integer> list = new ArrayList<>();
list.add(1); // 添加单个元素
list.addAll(Arrays.asList(2, 3, 4)); // 添加另一个集合中的所有元素

2.get方法:

用于获取数组中指定位置的元素。

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
int num = list.get(1); // 获取第2个元素,即2

3.set方法:

用于将数组中指定位置的元素替换成新的元素。

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
list.set(1, 5); // 将第2个元素替换成5

4.remove方法:

用于从数组中删除指定位置的元素。

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
list.remove(1); // 删除第2个元素,即2

 5.size方法:

用于获取数组的元素个数。

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
int size = list.size(); // 获取数组的元素个数,即3

6.toArray方法:

用于将ArrayList转换为数组。

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
int[] arr = list.stream().mapToInt(i -> i).toArray(); // 将ArrayList转换为int类型的数组

需要注意的是,由于ArrayList类是动态数组,支持动态扩容,因此在频繁进行数组拼接操作时,使用ArrayList类可能比使用传统数组更加高效。但是,由于ArrayList类使用了额外的内存空间,因此在对内存空间要求较高的场景下,需要谨慎使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值