Java 语言基础(JSD BASICS DAY05)

Day 05

目录

Day 05

数组

什么是数组

为什么使用数组

数组定义和初始化

 数组的访问和遍历

访问

遍历

综合练习

拓展

生成随机数

数组的复制和扩容

数组复制

数组扩容

数组的排序


数组

什么是数组

数组是一种引用数据类型,是用来存储多个相同数据类型元素的集合。它是一个连续的内存空间,每个元素在内存中都有一个地址(开辟出一个连续独立的空间)将一组类型相同逻辑相关的数据存在内存中。数组可以通过索引(下标)访问到其中的元素,索引从0开始,依次递增。数组的大小在创建时就确定,不可改变。数组可以存储基本数据类型或者对象。

为什么使用数组

使用数组的目的是为了方便存储和访问多个相同类型的数据。数组是一种线性数据结构,可以按照一定的顺序存储多个元素,并且每个元素在内存中都有一个唯一的索引,通过索引可以快速地访问和修改数组中的元素。

数组定义和初始化

在Java语言中,可以通过以下三种方式声定义和初始化一个数组:

1.声明数组变量,然后使用关键字new创建数组对象并指定长度同时初始化为默认值:(boolean类型默认值为false)

dataType[] arrayName = new dataType[arraySize];

示例:

int[] numbers = new int[5]; //声明了一个整型数组 numebers,包含5个元素,每个元素都是int类型,并且初始化默认值 0;

2.声明数组变量,并初始化数组元素:

dataType[] arrayName = {element1, element2, ..., elementN};

示例:

int[] numbers = {1, 2, 3, 4, 5};

3.先声明数组变量,再初始化数组元素:

dataType[] arryName = new dataType[]{element1, element2, ..., elementN};

也可以写成 

dataType[] arryName;
arrName = new dataType[]{element1, element2, ..., elementN};

 注意:

示例:

int[] numbers = new int[] {1, 2, 3, 4, 5};
int[] numbers;
numbers = new int[] {1, 2, 3, 4, 5};

 数组的访问和遍历

访问

在Java中,可以通过索引访问数组的元素。数组的索引从0开始,用于指定元素在数组中的位置。

示例代码如下:

int[] numbers = {1, 2, 3, 4, 5};
int firstNumber = numbers[0]; // 访问第一个元素,结果为1
int secondNumber = numbers[1]; // 访问第二个元素,结果为2
int thirdNumber = numbers[2]; // 访问第三个元素,结果为3

需要注意的是,数组的索引不能超过数组的长度。如果尝试访问超出范围的索引,将会抛出ArrayIndexOutOfBoundsException异常。

遍历

可以通过循环遍历数组,通过遍历数组的索引,可以依次访问数组中的每个元素。如使用for循环遍历数组:

int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) {
    System.out.println(numbers[i]);
}

综合练习

找出数组中元素最大的值

public class FindMaxInArray {
    public static void main(String[] args) {
        int[] numbers = {5, 12, 7, 9, 3, 15};
        
        // 假设数组的第一个元素为最大值
        int max = numbers[0];
        
        // 循环遍历数组,比较每个元素和当前最大值
        for (int i = 1; i < numbers.length; i++) {
            if (numbers[i] > max) {
                max = numbers[i];
            }
        }
        
        System.out.println("数组中的最大值为:" + max);
    }
}
 

拓展

生成随机数

Java中生成随机数的两种方法:

1.使用Math类的random()方法:

int randomInt = (int) Math.round(Math.random() * (max - min) + min); // 生成一个[min, max]之间的随机整数

2. 使用Random类

Random random = new Random();
int randomInt = random.nextInt(max - min + 1) + min; // 生成一个[min, max]之间的随机整数

其中,min为生成随机数的最小值,max为生成随机数的最大值。

数组的复制和扩容

数组复制

在java中可以使用System类的arraycopy()方法来完成数组的复制更为灵活。该方法的语法如下:

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

其中:

  • src:表示源数组。
  • srcPos:表示源数组的起始位置。
  • dest:表示目标数组。
  • destPos:表示目标数组的起始位置。//目标数组的存储位置也要够,否则会下标越界
  • length:表示要复制的元素个数。//原数组要够取 否则会下标越界

下面是一个示例代码,演示了如何使用System.arraycopy()方法完成数组的复制:

int[] srcArray = {1, 2, 3, 4, 5};
int[] destArray = new int[srcArray.length];

System.arraycopy(srcArray, 0, destArray, 0, srcArray.length);

System.out.println(Arrays.toString(destArray)); // 输出:[1, 2, 3, 4, 5]

Java也可以使用Arrays类的copyOf()方法来复制数组但是没有上述方法灵活。该方法的语法如下:

public static <T> T[] copyOf(T[] original, int newLength)

其中

original:原的数组,

T[ ]      :目标数组

newLength:目标数组的长度。

//--若目标数组长度>原数组长度,则末尾位置补默认值

//--若目标数组长度<原数组长度,则将末尾的截掉

该方法返回一个新的数组,该数组包含了原始数组中的元素。

示例代码如下:

int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, arr1.length);

在这个例子中,arr1是要复制的原始数组,arr2是复制后的新数组。注意,copyOf方法只复制原始数组中的元素,而不是引用。

数组扩容

java中如果要扩容数组,也可以使用Arrays类的copyOf()方法来实现。只需要将newLength参数设置为比原始数组大即可,反之则为缩容。

示例代码如下:

int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, arr1.length + 1);

在这个例子中,arr1是原始数组,arr2是扩容后的新数组。新数组arr2的长度比原始数组arr1的长度多1。扩容后的新数组中,多出来的那个位置的值会被设置为0(对于int类型)或者null(对于引用类型)。

需要注意的是,如果原始数组是基本数据类型的数组,扩容后的新数组中多出来的那个位置的值为基本数据类型的默认值(如0),而不是null。

数组的排序

数组的排序是对数组世家的最常用的算法;

所谓排序,就是将数组的元素按照从大到小(降序)或者从小到大(升序)进项排序;

常见的排序算法有:冒泡排序,插入排序,选择排序,希尔排序等(后续单独讲)。

目前掌握Java中Arrays类的sort方法对数组进行排序即可。该方法有多个重载形式,可以对不同类型的数组进行排序。下面是对整型数组进行排序的示例:

import java.util.Arrays;

public class ArraySortExample {
    public static void main(String[] args) {
        int[] numbers = {5, 2, 9, 1, 3};
        
        // 使用Arrays类的sort方法对数组进行排序
        Arrays.sort(numbers);
        
        // 遍历排序后的数组
        for (int number : numbers) {
            System.out.println(number);
        }
    }
}

输出结果为:

1
2
3
5
9

文章有问题欢迎指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值