认识Java中的数组

数组

数组介绍

数组指的是一种容器,可以用来存储同种数据类型的多个值

数组容器在存储数据的时候,需要结合隐式转换考虑。

1718699494931

数组的定义与静态初始化

定义:

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

初始化

就是在内存中,为数组容器开辟空间,并将数据存入容器的过程。

方式:

静态初始化
格式:
完整格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
范例:int[] array = new int[]{11,22,33};
简化格式:
数据类型[]数组名 = {元素1,元素2,元素3...};
范例:int[]array = {11,22,33};
数组的地址值

表示数组在内存中的位置。

地址值的格式含义[D@776ec8df:[:表示当前是一个数组。D:表示数据类型。776ec8df:数组真正的地址值。

动态初始化

初始化时只指定数组长度,有系统为数组分配初始值。

格式:
数据类型[] 数组名 = new 数据类型[数组长度];
范例:int[] arr = new int[3];
静态初始化和动态初始化的区别

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

  • 明确元素个数,不明确具体数值,推荐使用动态初始化

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

  • 需求中已经明确了要操作的具体数据,直接静态初始化即可。

数组元素访问

格式:数组名[索引];

索引:也叫下标,角标。从0开始,逐个+1,连续不间断

数组遍历

将数组中的所有内容取出来,取出来之后可以(打印,求和,判断)。

idea快捷键快速生成数组遍历的方式:数组名.fori

练习

1.遍历数组求和

定义一个数组,存储1,2,3,4,5

遍历数组得到每个元素,求数组里面所有的数据和

package com.example.demo;

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++) {
           sum += array[i];
        }
        System.out.println(sum);
    }
}
2.统计个数

定义一个数组,存储1,2,3,4,5,6,7,8,9,10遍历数组得到每一个元素,统计数组里面一共有多少个能被3整除的数字。

package com.example.demo;

public class Test {
    public static void main(String[] args) {
        //定义数组并赋值
      int [] array = {1,2,3,4,5,6,7,8,9,10};
        //定义一个统计变量
      int count = 0;
        //遍历数组
        for (int i = 0; i < array.length; i++) {
            //能被3整除的
            if (array[i] % 3==0){
                count++;
            }
        }
        System.out.println(count);
    }
}
3.变化数据

定义一个数组,存储1,2,3,4,5,6,7,8,9,10遍历数组得到每一个元素。要求:1,如果是奇数,则将当前数字扩大两倍。2,如果是偶数,则将当前数字变成二分之一。

package com.example.demo;

public class Test {
    public static void main(String[] args) {
        //定义数组并赋值
      int [] array = {1,2,3,4,5,6,7,8,9,10};
        //变化数据
        for (int i = 0; i < array.length; i++) {
            if (array[i] % 2 !=0){
                array[i] =array[i] * 2;
            }else {
                array[i] = array[i]/2;
            }
        }
        //打印数组里面的每一个元素
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}

数组内存图

两个数组指向同一个空间的内存图

1.当两个数组指向同一个小空间是,其中一个数组堆小空间的值发生了改变,那么其他数组再次访问的时候都是修改之后的结果了。

1718712889085

两个数组内存图

1.只要是new出来的一定是在堆里面开辟了一个小空间。而且堆里面开辟出来的空间是有地址值的。

2.如果new了多次,那么在堆里面有多个小空间,每个小空间中都有各自的数据。

1718712488077

Java内存分配

1718705729249

1718711831899

注意:从JDK8开始,取消方法区,新增元空间。把原来方法区的多种功能进行拆分,有的功能放到了堆中,有的功能放到了元空间中。

方法运行时使用的内存,比如main方法运行,进入方法栈中执行。main方法开始执行是会进栈,代码执行完毕会出栈。

存储对象或数组,new来创建的,都存在在堆内存。new出来的东西会在这块内存中开辟空间并产生地址。

方法区

存储可以运行的class文件

本地方法栈

JVM在使用操作系统功能的时候使用,和我们开发无关

寄存器

给CPU使用,和我们开发无关。

数组常见问题

索引越界:

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

数组常见操作

1.求最值

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

package com.example.demo;

public class Test {
    public static void main(String[] args) {
//        定义一个数组
      int [] array = {33,5,22,44,55};
//        定义一个临时最大值
      int max = array[0];
//      循环遍历数组
//        循环的开始条件一定是0吗?
//如果循环的开始是0,那么第一次循环的时候是自己跟自己比了一下,对结果没有任何影响,但是效率偏低
//        为了提高效率,减少一次循环次数,循环开始条件可以写1
        for (int i = 0; i < array.length; i++) {
            if (array[i]>max){
                max = array[i];
            }
        }
//        打印
        System.out.println(max);
    }
}

2.遍历数组求和

需求:生成10个1~100之间的随机数存入数组

  • 求出所有数据的和
  • 求所有数据的平均数
  • 统计有多少个数据比平均值小
package com.example.demo;

import java.util.Random;

public class Test {
    public static void main(String[] args) {
//        定义一个动态初始化数组
        int array[] = new int[10];
        Random rd = new Random();
//        在数组中添加元素
        for (int i = 0; i < array.length; i++) {
            array[i]= rd.nextInt(100)+1;
        }
//        定义一个累加变量
        int sum = 0;
//        累加
        for (int i = 0; i < array.length; i++) {
            sum += array[i];
        }
        System.out.println(sum);
//        计算平均数
        int avg = sum / array.length;
        System.out.println(avg);
//        定义一个统计变量
        int count = 0;
//        遍历
        for (int i = 0; i < array.length; i++) {
            if (array[i]< avg){
                count++;
            }
        }
        System.out.println(count);
    }
}

3.交换数组中的数据

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

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

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

package com.example.demo;

public class Test {
    public static void main(String[] args) {
//        定义一个数组
        int [] array= {1,2,3,4,5};
        int a = array[0];
//        定义一个临时变量
        int temp = 0;
        int b = array[4];
        temp = a;
        a = b;
        b = temp;
        System.out.println(a);
        System.out.println(b);
    }
}
package com.example.demo;

public class Test {
    public static void main(String[] args) {
//        定义一个数组
        int [] array= {1,2,3,4,5};
//        利用循环去交换数据
        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;
        }
//        当循环结束后,数组的数据就实现了头尾交换
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]);
        }
    }
}

4.打乱数组中的数据

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

package com.example.demo;

import java.util.Random;

public class Test {
    public static void main(String[] args) {
//        需求:定义一个数组,存入1~5.要求打乱数组中所有数据的顺序。
//        定义一个数组
        int [] array= {1,2,3,4,5};
//        利用循环去交换数据
        Random random = new Random();
//        循环遍历数组
        for (int i = 0; i < array.length; i++) {
            int randomIndex = random.nextInt(array.length);
            int temp = array[i];
            array[i] = array[randomIndex];
            array[randomIndex] = temp;
        }
//        当循环结束后,数组的数据就实现了头尾交换
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
    }
}
  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验目的: 1. 掌握Java数组的基本概念和用法。 2. 熟悉Java数组的定义、初始化、赋值、遍历等操作。 3. 理解Java数组在编程的重要性和作用。 实验内容: 本次实验主要包括以下内容: 1. 数组的定义和初始化。 2. 数组的遍历和访问。 3. 数组的排序和查找。 4. 数组的复制和拼接。 实验步骤和结果: 1. 数组的定义和初始化 Java数组是一种特殊类型的变量,用于存储相同类型的数据。数组可以存储基本数据类型和对象类型。 定义和初始化数组的方法: ``` // 定义一个名为array的整型数组,长度为5 int[] array = new int[5]; // 初始化数组元素 array[0] = 1; array[1] = 2; array[2] = 3; array[3] = 4; array[4] = 5; ``` 也可以使用以下方式定义和初始化数组: ``` // 定义一个名为array的整型数组,同时初始化数组元素 int[] array = {1, 2, 3, 4, 5}; ``` 2. 数组的遍历和访问 数组的遍历和访问可以通过循环语句来实现。常用的循环语句有for循环和foreach循环。 ``` // 使用for循环遍历数组 for(int i=0; i<array.length; i++){ System.out.println(array[i]); } // 使用foreach循环遍历数组 for(int num : array){ System.out.println(num); } // 访问数组元素 System.out.println(array[0]); ``` 3. 数组的排序和查找 Java数组提供了sort()方法来对数组进行排序。sort()方法可以对基本数据类型和对象类型进行排序。 ``` // 对整型数组进行排序 Arrays.sort(array); // 对字符串数组进行排序 String[] strArray = {"apple", "banana", "orange"}; Arrays.sort(strArray); ``` Java数组也提供了binarySearch()方法来进行二分查找。binarySearch()方法可以对已经排序的数组进行查找。 ``` // 对整型数组进行二分查找 int index = Arrays.binarySearch(array, 3); ``` 4. 数组的复制和拼接 Java数组提供了copyOf()方法来复制数组。copyOf()方法可以对原数组进行复制,也可以指定复制的长度。 ``` // 复制整个数组 int[] newArray = Arrays.copyOf(array, array.length); // 复制部分数组 int[] partArray = Arrays.copyOf(array, 3); ``` Java数组也可以通过arraycopy()方法来进行拼接。arraycopy()方法可以将一个数组的元素复制到另一个数组。 ``` // 将两个数组拼接 int[] array1 = {1, 2, 3}; int[] array2 = {4, 5, 6}; int[] newArray = new int[array1.length + array2.length]; System.arraycopy(array1, 0, newArray, 0, array1.length); System.arraycopy(array2, 0, newArray, array1.length, array2.length); ``` 实验结论: 通过本次实验,我深入了解了Java数组的基本概念和用法。掌握了Java数组的定义、初始化、赋值、遍历、排序、查找、复制和拼接等操作。同时,也深刻认识Java数组在编程的重要性和作用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值