java 数组

本文详细介绍了Java中的数组概念,包括数组的定义、动态分配空间、存储数据的方法,以及常用的遍历技巧(for循环和增强for),并展示了如何获取数组长度、查找最大值以及在保持数组降序的情况下插入新数据。
摘要由CSDN通过智能技术生成

1.数组:
概念:
数组是一组相同数据类型元素的集合。在Java中数组属于引用类型,即数组是一个对象。
这里的数据类型不仅含八大基本数据类型,
还包含引用数据类型,如数组里面可以存数组,数组里面可以存放字符串。
注:大白话就是数组是存储同种类型数据的数据容器,数据类型可以包括如基本类型、引用类型,且数组本身就是一个引用类型,切记数组的长度不可改变!!!

创建:

1. 定义数组

形式:  类型[] 数组名;  或者 类型 数组名[] 
如:    int[]  score;  

意义为,定义了一个变量名为score的整数数组

2. 开辟空间

形式: 数组名=new 类型[大小];
如:   score=new int[5];    

意义为score数组开辟了5个数据长度的空间
注:下标是从0开始,开辟的空间是连续不间断的。
注:因为数据的长度是不可改变的,如 先定长度为5的数组 int nums=new int[5]
再通过new改变长度是不可取 原本数组的数据会丢失。

3. 简化操作 快速定义数组并开空间

形式: 类型[] 数组名=new 类型[数组长度]; 
或者 类型 数组名[]=new 类型[数组长度];
如:  int[]  score=new int[5];

注: 意义为,定义了一个变量名为score长度为5的整数数组

4. 存储数据

形式: 数组名[下标]=要赋给的值;
如  score[0]=1;   意义为score的第一个元素为1

注:长度为5的数组的最后一位元素的下标是4,因为是从0开始标记的,
切记使用的不能超过开辟空间大小-1不然会越界报错,如上列中大小为5
score[5或者以上]=值 都会报错。
注:存储的数据要和定义的类型相同不然会报错
注:如果还未存储数据的数组元素会通过默认值占位,
整数,浮点型的默认值为0 字符型默认为null

5. 简化操作 快速定义数组开空间并赋值

形式:类型[] 数组名={数据1,数据2...}; 
如: String[] strs={"hello","world","fan"};
其完整版本为
形式: 类型[] 数组名=new 类型[]{数据1,数据2...}; 
如: String[] strs=new String[]{"hello","world","fan"};

注:意义为创建数组名strs的变量,类型为String,长度为3
注:长度是以赋值了多少个元素就给多少长度
注:推荐这样的写法

6. 操作数据

形式: 数组名[下标]输出对应下标的元素
注:不能直接使用 数组名 这样使用的是变量的地址
如: System.out.println(score);
打印出的数据就是数组的地址,而不是数组存储的数据。

包含的常用方法(未写完,后续再补充):

1. length 获得数组长度

形式: 数组名.length;
注:返回值是整形 返回值的是数组的长度

遍历

for循环

for(int 变量=0;变量<数组.length;变量++){
         System.out.println(数组[变量]);
    }
如:    for (int i = 0; i < score.length; i++) {
        score[i]=i;
        System.out.println(score[i]);
    }
注:该代码的意义是给score数组赋值0 1 2 3 4 并打印出

增强for 又叫范围for

形式:

  for (类型 变量:数组名){
        System.out.println(变量);
    }

如:

   for (int x:score){
        System.out.println(x);
    }

注:意义为 将数组score的数据依次取出赋值给x,再打印x
注:局限性:只能遍历不能对数组的数据本身改变。
如:

 for (int x:score){
        x=scanner.nextInt();
        System.out.println(x);
    }
注:该方式输入数据后score的值不会改变,所以不能通过范围for给数组赋值。

#扩展 var 强类型推导关键词
可以简化上列范围for
如:

  for (var x:score){
        System.out.println(x);
    }

注:此时我们不需要关注数组的类型来确定x的类型,
而是通过数组score赋值给x的数据类型来推导出x的类型
注:可以想象为C++ 的auto
注:var是java10之后版本推出的语法不适用于java10前的版本!!!

求数组中的最大值

思路:
假定第一个数据为最大值,依次将数组的数据和第一个比较,如果有数据比第一个大,
就假定该为新的最大值,再向后比较直到结束。
如:

  int[] nums = {8, 4, 2, 1, 23, 344, 12};
       //假定第一个为最大值
     int max=nums[0];
     for(int x:nums){
        //如果数据大于假定的最大值max,就将该数据假定为最大值
        if(x>max){
            max=x;
        }
        //如果不大于就继续
     }
     System.out.println(max);
注:最后得到的max就是最大值。

插入数据,且保持降序

思路:

    int[] nums = {344, 23,12,8, 4, 2, 1};插入数据20
    因为长度不可改变,所以我们需要先申请一块新的数组且长度够我们存放全部数据。
       int[] nums_new=new int[8];
       //因为nums已经有序直接比较大小先插入较大的数据
    for (int i = 0, j=0; i < nums_new.length; i++) {
        //如果nums[j]>num_inse 说明nums当前值较大插入nums的值,如果不是插入num_inse
        if(nums[j]>=num_inse){
            nums_new[i]=nums[j];
            j++;

        }else{
            nums_new[i]=num_inse;
            //且将num_inse变成最小的数,避免nums的后续数据无法插入
            num_inse=nums[nums.length-1];
        }
    }
    //遍历
    for (int x : nums_new) {
        System.out.print(x + " ");
    }

注:局限性:数组是降序的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值