Java数组 详解(初始化 格式 索引 地址值 遍历 …)

数组

什么是数组?

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

小结:

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

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

//例如 int 类型的数组容器 (  byte  short  int  )

//例如 double类型的数组容器  (  byte  short  int  long  float  double  )

//建议 容器的类型  和存储的数据类型保持一致

数组的定义:

@ 格式 1  

数据类型 [ ]  数组名

例子: int  []  array

@ 格式 2  

数据类型  数组名  [ ]

例子:  int  array  [ ]

数组初始化

什么是数组的初始化?

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

数组初始化有两种方式:   静态初始化    动态初始化

数组的静态初始化

完整格式:

数据类型 []  数组名  =  new 数据类型[] {元素 1 ,元素 2 ,元素 3 ……};

例子:int [] array = new int [] { 11 , 12 , 13 };

例子:double [] array2 = new double [] { 11.1 , 12.2 , 13.3 }; 

数组的动态初始化

动态初始化

初始化只指定数组长度 由系统为数组分配初始值

格式:

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

例子:

int [] arr =new int[3];

小结

静态初始化和动态初始化区别

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

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

举例:

使用数组容器来存储键盘录入的五个整数

int [] arr = {? ? ? };

int [] arr = new int[5];

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

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

例子:

将全班同学成绩存入数组中 11 , 12 , 13 

int [] arr = {11 ,12 ,13};
 

数组的地址值:

地址值是什么?

数组的地址值是表示数组在内存中的位置

int array1[ ] = {11,12,13,14,15}; 
System.out.println(array1);
 //[I@4554617c 地址值
解释一下地址值格式含义:
//[D@4554617c

  [  : 表示当前是一个数组

 D :表示是 double 类型的 I 表示 int 类型

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

 4554617c :才是真正的数组值  (十六进制)

索引

索引  索引特点

索引:也叫做下标 角标

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

测试

利用索引对数组中的元素进行访问

 1 . 获取数组里面的元素
package com.Test;


import java.util.Random;

public class Demo01 {
    public static void main(String[] args) {


        //格式 : 数组名 [索引]         
        //利用索引对数组中的元素进行访问
        //1.获取数组里面的元素

        int[] arr = {1,2,3,4,5};
        //获取数组中的第一个元素
        //其实就是 0 索引上对应的元素
        int number = arr[0];
        System.out.println(number); //1

        //获取1索引上对应的数据,并直接打印出来
        System.out.println(arr[1]); //2
        
    }
}

2.把数据存储到数组中
package com.Test;


import java.util.Random;

public class Demo01 {
    public static void main(String[] args) {

        int[] arr = {1,2,3,4,5};
        
        //格式 : 数据名 [索引] = 具体数据/变量;
        //2.把数据存储到数组中
        //细节 :数值一旦覆盖 原来的就不存在了 
        
        arr[0] =100;
        System.out.println(arr[0]);
    }
}

数组的遍历

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

注意:遍历指的是取出数据的过程 不要局限理解为遍历就是打印

代码:
package com.Test;


public class Demo01 {
    public static void main(String[] args) {
        //1.定义一个数组

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

        //2.获取数组里面所有元素
        //格式 :数组名称 [索引]

        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        System.out.println(arr[3]);
        System.out.println(arr[4]);
    }
}

优化代码:
package com.Test;


public class Demo01 {
    public static void main(String[] args) {
        

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

        //利用循环改进代码
        
        for (int i = 0; i < 5; i++) {
            System.out.println(arr[i]);
        }
    }
}

数组长度

package com.Test;


public class Demo01 {
    public static void main(String[] args) {


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

        //在Java中关于数组长度属性, .length
        //调用方式  数组名.length

        System.out.println(arr.length);
        }
}
优化:
package com.Test;


public class Demo01 {
    public static void main(String[] args) {


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

        //在Java中关于数组长度属性, .length
        //调用方式  数组名.length

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

    }
}

练习 1

遍历数组并求和

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

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

代码:
package com.Test;


public class Demo01 {
    public static void main(String[] args) {


        int[] arr = {1,2,3,4,5};
        int sum = 0;

        for (int i = 0; i < arr.length; i++) {

            sum = sum + arr[i];
        }
       
        System.out.println(sum);

        
    }
}

练习 2

统计个数

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

遍历数组得到每一个元素 统计数组里面一共有多少个能被3整除的数

代码:
public class Demo01 {
    public static void main(String[] args) {


        int[] arr = {1,2,3,4,5,6,7,8,9,10};

        int count = 0;

        for (int i = 0; i < arr.length; i++) {

            if (arr[i]  %3==0){
                //System.out.println(arr[i]);
            count++;
            }
        }
        System.out.println("整数中能被3整除的数有"+count+"个")

    }
}

练习 3

变化数据

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

遍历数组得到每一个元素

要求:

如果是奇数,则将当前的数字扩大两倍

如果是偶数, 则当前的数字变成二分之一

代码:
public class Demo01 {
    public static void main(String[] args) {


        int[] arr = {1,2,3,4,5,6,7,8,9,10};


        for (int i = 0; i < arr.length; i++) {

            if (arr[i]%2==0){
                arr[i]=arr[i]/2;
            }else{
                arr[i]=arr[i]*2;
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

    }
}

数组的常见问题

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

数组的常见操作

@ 1 求最值

需求:

已知数组元素为{33 ,5 , 22 , 44 ,55 }

请找出数组最大值并打印在控制台

代码:

最大值

package com.Test;


public class Demo01 {
    public static void main(String[] args) {


        int[] arr = {33,5,22,44,55};

        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]>max) {
                max = arr[i];
            }
        }
        System.out.println(max);
    }
}

最小值

package com.Test;


public class Demo01 {
    public static void main(String[] args) {


        int[] arr = {33,5,22,44,55};

        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]<max) {
                max = arr[i];
            }
        }
        System.out.println(max);
    }
}

@ 2 求和

遍历数组求和

需求:

生成 10 个 1 - 100 之间的随机数存入数组

 1 求出所有数据的和

 2 求出所有数据的平均数

 3 统计有多少个数据比平均数小

代码:

package com.Test;


import java.util.Random;

public class Demo01 {
    public static void main(String[] args) {

        int[] arr = new int [10];
        Random  r = new Random();
        for (int i = 0; i < arr.length; i++) {
            int number = r.nextInt(100);
            arr[i] = number;
        }
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum = sum + arr[i];
        }
        System.out.println("数组中所有数的和为"+sum);

        int avg =sum / arr.length;
        System.out.println("数组的平均数为"+avg);

        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]<avg){
                count++;
            }
        }
        System.out.println("在数组中有"+count+"个数据 比平均数小");

        //验证
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"  ");   
   }
}

@ 3 交换数据

交换数组中的数据

需求:

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

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

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

代码:

package com.Test;

public class Demo01 {
    public static void main(String[] args) {

        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 要求打乱数组中所有数据顺序

代码:

package com.Test;

import java.util.Random;

public class Demo01 {
    public static void main(String[] args) {

        int[] arr = {1,2,3,4,5};
        //循环遍历数组 从 0 开始打乱顺序
        Random r = new Random();

        for (int i = 0; i < arr.length; i++) {

          int randomIndex = r.nextInt(arr.length);
          //拿着随机数组元素进行交换
          int temp = arr[i];
          arr[i] = arr[randomIndex];
          arr[randomIndex] = temp;

        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print (arr[i] + "  ");
        }
    }
}

数组的内存图

Java内存分配

栈 : 方法运行时使用的内存 比如 main 方法运行 进入方法栈中实行

堆 : 存储对象或者数组 new 来创建 都存储在堆内存

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

本地方法栈 :JVM 在使用操作系统功能的使用 和我们开发无关

寄存器 :给本地 CPU 使用 和我们开发无关

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值