Java数组

1、数组是什么?

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

  • 注意:数组容器在存储数据是,需要结合隐式转换考虑;

    • int类型(byte、short、int)

    • double(byte、short、int、long、float、double)

2、数组的定义与静态初始化

1.数组定义:

  • 格式:

    • 数据类型[] 数组名

      • 例:int[] array

    • 数据类型 数组名[]

      • 例:int array[]

2.初始化:

(1)静态初始化:

  • 定义:就是内存中,为数组容器开辟空间,并将数据存入容器中的过程

  • 格式:

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

    • 常用格式/简写格式:数据类型[] 数组名={元素1,元素2,元素3……};

(2)动态初始化:

  • 定义:初始化时只指定数组长度,由系统为数组分配初始值;

  • 格式:

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

  • 数组默认初始化值规律:

    • 整数:默认初始化是0;

    • 小数:默认初始化时0.0

    • 字符:默认初始化值'/u0000'空格

    • 布尔:默认初始化值:false

    • 引用数据类型:默认初始化值null

(3)静态与动态初始化区别:

名称动态静态
定义手动指定数组长度,游戏厅给出默认初始化值手动指定数组元素,系统会根据元素个数,计算出数组长度
使用场景只明确元素个数,不明确具体数值需求已经明确要操作的具体数据

3、数组地址值和元素访问:

1.数组地址值:

(1)表示:数组在内存中的位置;

(2)[D@776ec8df:

  • [:表示当前是数组;D:表示数据类型是double;@:表示间隔符号(固定格式);776ec8df:才是数组真正的地址值(十六进制)

2.元素访问:

(1)格式:
  • 数组名[索引];

(2)索引:
  • 也叫下标、角标;

  • 特点:从0开始,逐个+1增长,连续不间断

(3)两种方式:
  • 获取数组中的元素:

  • 把数据存储到数组中

    • 格式:数组名[索引]=具体数据/变量;

array[0]=100;
System.out.println(array[0]);

4.数组的遍历:

1.定义:

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

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

定义一个数组,存储1,2,3,4,5,6,7,8,9,10

遍历数组得到每一个元素

要求:如果是奇数当前数字扩大两倍;偶数当前数字缩小一半

 public static void main(String[] args) {
        int[] array={1,2,3,4,5,6,7,8,9,10};// 2,1,6,2,10,3,14,4,18,5
        int num=0;
        for (int i = 0; i < array.length; i++) {
//            System.out.println(array[i]);
            if(array[i]%2==0){
                array[i]/=2;
            } else{
                array[i]*=2;
            }
            System.out.println(array[i]);
        }
    }

5.数组常见问题:

1.索引越界异常:当访问数组中不存在的索引

  • 索引范围:最小索引:0;最大索引:数组长度-1;

6.数组内存图:

(1)Java内存分配:
  • 栈(先进后出):方法运行时使用的内存,比如main方法运行,进入方法栈中执行

  • 堆(先进先出):存储对象或者数组,new来创建的,都存储在堆内存;目前new出来的只有数组

  • 方法区:存储可以运行的class文件

  • 本地方法栈:jvm在使用操作系统功能的时候使用

  • 寄存器:给cpu使用


(2)数组的内存图:

  • 一个数组:

  • 两个数组:

(3)两个数组指向同一个空间的内存图:

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

7.练习题:

(1)求最值:

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

   public static void main(String[] args) {
//        已知数组元素{33,5,22,44,55},请找出数组最大值并打印在控制台;
        int[] arr={33,5,22,44,55};
        int max=arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(arr[i]>max){
                int temp=max;
                max=arr[i];
                arr[i]=temp;
            }
        }
        System.out.println(max);
    }

(2)遍历数组求和:

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

求:所有数据的和;所有数据的平均数,统计有多少个数据比平均值小;

 public static void main(String[] args) {
//       需求:生成10个1~100之间的随机数存入数组;
//求:所有数据的和;所有数据的平均数,统计有多少个数据比平均值小;
        int[] arr=new int[10];
        Random random = new Random();
        for (int i = 0; i < arr.length; i++) {
            int num= random.nextInt(100)+1;
//            将生成随机数添加到数组
            arr[i]=num;
        }
        int sum=0;
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
            sum+=arr[i];
        }
        System.out.println("和是:"+sum);
        int average=sum/ arr.length;
        System.out.println("平均值是:"+average);
        int min=arr[0];
        int count=0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]<min){
                count++;
            }
        }
        System.out.println("有"+count+"个数比平均值小");
    }

(3)交换数组中的数据:

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

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

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

  public static void main(String[] args) {
//需求:定义一个数组,存入1,2,3,4,5。按照要求交换索引对应的元素;
//交换前:1,2,3,4,5
//交换后:5,4,3,2,1
        int[] arr = {1, 2, 3, 4, 5};
        for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
    }

(4)打乱数组中的数据:

需求:定义一个数组,存入1~5.

要求:打乱数组中所有数据的顺序。

 public static void main(String[] args) {
//需求:定义一个数组,存入1~5.
//要求:打乱数组中所有数据的顺序。
        int[] arr={1,2,3,4,5};
        Random random = new Random();
//        循环遍历数组,从0索引开始打乱数据的顺序
        for (int i = 0; i < arr.length; i++) {
//            生成一个随机索引
            int index= random.nextInt(arr.length);
//            拿着随机索引指向元素 跟i指向的元素进行交换
            int temp=arr[i];
            arr[i]=arr[index];
            arr[index]=temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值