Java学习笔记-day05-数组

1、介绍

1.1 概念

数组指的是一种容器,可以同来存储同种数据类型的多个值。但是数组容器在存储数据的时候,需要结合隐式转换考虑。

1.2 定义

格式一:数据类型 [] 数组名

例如:int [] array

格式二:数据类型 数组名 []

比如: int array []

1.3 静态初始化

初始化:在内存中为数组容器开辟空间,并将数据存入容器中的过程。

完整格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,元素4...};

例如:int[] arr = new int[]{11,22,33};

简化格式:数据类型[] 数组名 = {元素1,元素2,元素3,元素4...};

例如:int[] arr = {11,22,33};

注:数组一旦创建之后,长度不能发生变化。

2、元素访问

2.1 地址值(了解)

打印数组的时候,实际出现的是数组的地址值。

数组的地址值:就表示数组在内存中的位置。

int[] arr = {1,2,3,4,5};
System.out.println(arr);//输出结果:[I@6d03e736

以[I@6d03e736为例:

[ :表示现在打印的是一个数组。

I:表示现在打印的数组是int类型的。

@:表示一个间隔符号。(固定格式)

6d03e736:就是数组在内存中真正的地址值。(十六进制)

2.2 元素访问

格式:数组名[索引];

索引:也叫角标、下标,就是数组容器中每一个小格子对应的编号。

索引的特点:索引一定是从0开始的; 连续不间断;逐个+1增长。

public class Test {
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        //作用1:获取指定索引上对应的元素
        int number = array[0];
        System.out.println(number);//获取数字1

        //2.修改指定索引上对应的元素
        //一旦修改之后,原来的值就会被覆盖了
        array[0] = 10;
        System.out.println(array[0]);//10
    }
}

3、遍历

3.1 格式

遍历:就是把数组里面所有的内容一个一个全部取出来。

数组的长度:数组名.length;

通用代码:

for(int i = 0; i < arr.length; i++){
    //在循环的过程中,i依次表示数组中的每一个索引
    System.out.println(array[i]);
}

扩展:数组名.fori,由idea提供的自动的快速生成数组的遍历方式。

3.2 练习

练习一:遍历数组并求和

需求:定义一个数组,存储1,2,3,4,5,遍历数组得到每一个元素,求数组里面所有的数据之和。

public class Test {
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        int sum = 0;
        for (int i = 0; i < array.length; i++) {
            //array[i]依次是数组里面的每一个元素
            sum = sum + array[i];
        }
        System.out.println(sum);
    }
}

练习二:统计个数

需求:定义一个数组,存储1~10,遍历数组得到每一个元素,统计数组里面一共有多少个能被3整除的数字。

public class Test {
    public static void main(String[] args) {
        //1.定义数组
        int[] array = {1,2,3,4,5,6,7,8,9,10};
        int count = 0;
        //2.遍历数组
        for (int i = 0; i < array.length; i++) {
            //3.进行判断
            if (array[i] %3 == 0){
                count++;
            }
        }
        System.out.println("能被3整除的数字个数为:" + count);
    }
}

练习三:变化数据

需求:定义一个数组,存储1~10,遍历数组得到每一个元素。如果是奇数,则将当前的数字扩大两倍;如果是偶数,则将当前数字变成二分之一。

public class Test {
    public static void main(String[] args) {
        //1.定义数组
        int[] array = {1,2,3,4,5,6,7,8,9,10};
        //2.遍历数组
        for (int i = 0; i < array.length; i++) {
            //3.进行判断
            if (array[i] % 2 == 1){
                array[i] = array[i] * 2;
            }else {
                array[i] = array[i] / 2;
            }
        }
        //一个循环尽量只做一件事情
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}

4、动态初始化

4.1 格式

动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。

格式:数据类型[] 数组名 = new 数据类型[数组的长度];

示例:int[] arr = new int[3];

数组默认初始化值:

整数类型:0

小数类型:0.0

布尔类型:false

字符类型:'\u0000'   空格

引用类型:null

4.2 两种初始化方式的区别

静态初始化:手动指定数组的元素,系统会根据元素的个数,计算出数组的长度。

动态初始化:手动指定数组长度,由系统给出默认初始化值。

使用场景:只明确元素个数,但是不明确具体的数据,推荐使用动态初始化;已经明确了要操作的所有数据,推荐使用静态初始化。

5、常见操作

5.1 求最值

需求:已知数组元素为{33,5,22,44,55},请找出数组中最大值并打印在控制台。

public class Test {
    public static void main(String[] args) {
        //1.定义数组
        int[] array = {33,5,22,44,55};
        //max的初始化值一定要是数组中的值
        int max = array[0];
        //2.遍历数组
        for (int i = 1; i < array.length; i++) {
            //3.进行比较
            if (array[i] > max){
                max = array[i];
            }
        }
        //4.当循环结束之后,max记录的就是数组中的最大值
        System.out.println(max);
    }
}

5.2 求和

需求:生成10个1~100之间的随机数存入数组。1)求出所有数据的和;2)求所有数据的平均数;3)统计有多少个数据比平均值小。

import java.util.Random;

public class Test {
    public static void main(String[] args) {
        //定义数组
        int[] array =new int[10];
        Random r = new Random();
        //把随机数存入数组
        for (int i = 0;i <= 9;i++){
            array[i] = r.nextInt(100) + 1;
        }
        //遍历数组
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");//去掉ln则不会换行
        }
        //1)求数据和
        int sum = 0;
        for (int i = 0; i < array.length; i++) {
            sum = sum + array[i];
        }
        System.out.println("所有数据的和为:" + sum);
        //2)求平均数
        int average = sum / array.length;
        System.out.println("所有数据的平均数为:" + average);
        //3)求比平均值小的数据个数
        int count = 0;
        for (int i = 0; i < array.length; i++) {
            if (array[i] < average){
                count++;
            }
        }
        System.out.println("比平均值小的数据个数为:" + count);
    }
}

5.3 交换数据★

需求:定义一个数组,存入1,2,3,4,5。按照要求交换索引对应的元素。

交换前:1,2,3,4,5

交换后:5,4,3,2,1

public class Test {
    public static void main(String[] args) {
        //1.定义数组存储数据
        int[] array = {1,2,3,4,5};
        //2.利用循环交换数据
        for (int i =0,j = array.length - 1;i < j;i++,j--){
            //交换变量i和变量j指向的元素
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
        //3.遍历数组,打印验证
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }
}

5.4 打乱数据★

需求:定义一个数组,存入1~5。要求打乱数组中所有数据的顺序。

public class Test {
    public static void main(String[] args) {
        //1.定义数组存储数据
        int[] array = {1,2,3,4,5};
        Random r = new Random();
        //2.利用循环交换数据
        for (int i =0;i < array.length;i++){
            //生成随机索引
            int randomIndex = r.nextInt(array.length);
            //将当前i指向的元素与一个随机索引指向的元素进行交换
            int temp = array[i];
            array[i] = array[randomIndex];
            array[randomIndex] = temp;
        }
        //3.遍历数组,打印验证
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }
}

5.5 常见问题

索引越界:当访问了数组中不存在的索引,就会引发索引越界异常。

6、内存图

Java的内存分配:

  • 栈:方法运行时使用的内存
  • 堆:存储对象或者数组,new来创建的,都存储在堆内存
  • 方法区:存储可以运行的class文件
  • 本地方法栈:JVM在使用操作系统功能的时候使用,和开发无关
  • 寄存器:给CPU使用,和开发无关

两个数组指向同一个空间:

其中一个数组对小空间的值进行修改,那么其他数组再次访问的时候都是修改之后的结果了。

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会为你介绍Python中的数组。 在Python中,数组是一种存储元素的数据结构。与列表不同,数组是固定大小的,且元素类型必须相同。 要使用数组,需要先导入array模块。下面是一个创建数组的示例: ```python import array as arr # 创建一个整数类型的数组 a = arr.array('i', [1, 2, 3, 4, 5]) # 打印数组 print(a) ``` 在上面的示例中,我们使用了`array`模块创建了一个整数类型的数组,并初始化了它。要注意的是,第一个参数是一个字符,用于指定数组元素的类型。在本例中,我们使用了`i`,表示整数类型。 除了整数类型之外,还有其他类型可以使用,如`f`表示浮点数,`d`表示双精度浮点数,`b`表示布尔类型等。 在数组中,可以使用索引来访问元素,如下所示: ```python import array as arr # 创建一个整数类型的数组 a = arr.array('i', [1, 2, 3, 4, 5]) # 访问数组中的第一个元素 print(a[0]) # 修改数组中的第二个元素 a[1] = 6 # 打印数组 print(a) ``` 在上面的示例中,我们使用了索引`0`来访问数组中的第一个元素,使用索引`1`来修改数组中的第二个元素。 除了使用索引来访问和修改元素外,还可以使用循环来遍历数组中的所有元素,如下所示: ```python import array as arr # 创建一个整数类型的数组 a = arr.array('i', [1, 2, 3, 4, 5]) # 遍历数组中的所有元素 for i in a: print(i) ``` 在上面的示例中,我们使用了`for`循环来遍历数组中的所有元素,并打印每个元素的值。 这就是Python中数组的基本用法。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值