首页 > 其他分享 >数组

数组

时间:2023-08-17 11:00:37浏览次数:22  
标签:arr int System 数组 println out

数组

概述

  1. 一次性声明大量的用于存储数据的变量
  2. 这写存储的数据一般都是相同的数据类型
  3. 数组是一个用于存储多个相同类型数据的存储模型

数组的定义

  1. 范例1

    int [] arr;(推荐使用)

    含义:先定义数组,在定义数组名

  2. 范例2
    int arr [];
    含义:先定义数组名,在定义数组;

数组的初始化

  1. 动态初始化
  2. int [] arr = new int[5];

1.int 数组的数据类型 []代表数组
2. arr代表的数组名
3. 第二个int 表示的时数组的数据类型要与前面定义的相同
4.[5]表示定义了一个数组长度为5的数组[0-4]
5.数组会分配一个初始值,值是多少油数据类型决定

package com.ygc;

/**
 * @author: YGC
 * @createTime: 2023/08/16 22:30
 * @blogs: https://www.cnblogs.com/ygcDiary
 * @description: 数组
 */
public class ArrayDemo {
    public static void main(String[] args) {
        int [] arr = new int[5];
        /*
        1.int 数组的数据类型 []代表数组
        2. arr代表的数组名
        3. 第二个int 表示的时数组的数据类型要与前面定义的相同
        4.[5]表示定义了一个数组长度为5的数组[0-4]
        5.数组会分配一个初始值,值是多少油数据类型决定
        * */
    }
}

数组的访问

需要注意的是,数组从0开始计算

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[5];
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        int c = arr[2];
        System.out.println("c=" + c);
    }
}

数组的内存分配

  1. 做new操作时都会将该对象(实例)存放在堆内存中
  2. 堆内存会将该实例的地址赋值给栈内存,也就是定义数组的时候的数组名
  3. 此时输出的是该数组在堆内存中的地址,用于栈内存访问
System.out.println(arr);//[I@4554617c

访问顺序

执行程序时,先根据栈内存中的地址,访问到堆内存,然后根据下标找到对应的数

注意事项

  1. 数组在初始化的时候,会为存储空间分配默认值

int :0

double :0.0

boolean :false

String : 空字符

  1. 如果数组指向相同的堆内存地址,则不会在开辟新的空间,而是将原来的空间取代
package com.ygc;
public class ArrayDemo {
    public static void main(String[] args) {
        int [] arr1 = new int[5];
        arr1[0] = 100;
        arr1[1] = 50;
        System.out.println(arr1);//[I@4554617c
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        int [] arr2 = arr1 ;//将内存赋值给arr2
        arr2[0] = 300;
        arr2[1] = 10;
        System.out.println(arr2);//[I@4554617c
        System.out.println(arr2[0]);//300
        System.out.println(arr2[1]);//10
        System.out.println(arr1[0]);//300
        System.out.println(arr1[1]);//10
    }
}

栈内存

  1. 栈内存是一片存储区域,用来存储局部变量
  2. 堆内存:凡是通过new建立的都是在堆内存中,存放的都是 实体(对象 )

数组静态初始化

​ 静态初始化指的就是,在数组初始化的时候,赋给数组值,并由系统决定数组的长度

格式

int [] arr = new int[]{1,2,3}

数组类型[] 数组名 = new 数组类型[]{数组元素}

简化

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

数组类型[] 数组名 = {数组元素}

package com.ygc;

/**
 * @author: YGC
 * @createTime: 2023/08/17 9:57
 * @blogs: https://www.cnblogs.com/ygcDiary
 * @description: 静态数组
 */
public class ArrDemo01 {
    public static void main(String[] args) {
        /*定义一个静态数组*/
        int[] arr = {1,2,3,4};
        int[] arr1 = new int[]{1,2,3,4,5};
        System.out.println(arr[0]);
        System.out.println(arr1[4]);
    }
}

常见问题

  1. 数组访问越界,意思是定义了一个四个长度的数组却引用了第五个元素
package com.ygc;

/**
 * @author: YGC
 * @createTime: 2023/08/17 10:01
 * @blogs: https://www.cnblogs.com/ygcDiary
 * @description: 数组常见错误
 */
public class ArrDemo02 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4};
        System.out.println(arr[4]);

    }
}
//错误代码
/*Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
	at com.ygc.ArrDemo02.main(ArrDemo02.java:12)*/
  1. 空指针异常,意思是原数组已经不在堆内存中具有地址,但你仍然使用数组名访问数组元素
package com.ygc;

/**
 * @author: YGC
 * @createTime: 2023/08/17 10:01
 * @blogs: https://www.cnblogs.com/ygcDiary
 * @description: 数组常见错误
 */
public class ArrDemo02 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4};
        arr = null;
        System.out.println(arr[3]);
/*空指针异常
java.lang.NullPointerException
*/
    }
}

数组遍历

使用for循环实现数组的遍历

package com.ygc;

/**
 * @author: YGC
 * @createTime: 2023/08/17 10:18
 * @blogs: https://www.cnblogs.com/ygcDiary
 * @description: 遍历数组
 */
public class ArrDemo03 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4};
        for (int i = 0; i < 4; i++) {
            System.out.println(arr[i]);
        }
    }
}

使用API进行数组的遍历

arr.length:表示的是数组的长度,数组元素的个数,不是数组的下标

package com.ygc;

/**
 * @author: YGC
 * @createTime: 2023/08/17 10:18
 * @blogs: https://www.cnblogs.com/ygcDiary
 * @description: 遍历数组
 */
public class ArrDemo03 {
    public static void main(String[] args) {
        int[] arr1 = {66,77,88,99};
        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]);
        }
    }
}

练习

  1. 输出数组的一个最大值
package com.ygc;

/**
 * @author: YGC
 * @createTime: 2023/08/17 10:39
 * @blogs: https://www.cnblogs.com/ygcDiary
 * @description: 数组获取最大值
 */
public class ArrExer01 {
    public static void main(String[] args) {
        int tempMax = 0;
        int max = 0;
        int[] arr = {170,162,131,168,190};
        /*此时arr.length不满足条件,因为下面需要使用arr[i+1],会使数组下标越界*/
        for (int i = 0; i < arr.length-1; i++) {
            if (arr[i] > arr[i+1]) {
                tempMax = arr[i];
                arr[i+1] = arr[i];
                arr[i+1] = tempMax;
            }
            max = arr[i+1];
         }
        System.out.println("最大的值是:"+max);
    }
}

package com.ygc;

/**
 * @author: YGC
 * @createTime: 2023/08/17 10:22
 * @blogs: https://www.cnblogs.com/ygcDiary
 * @description: 获取数组最大值练习
 */
public class ArrExer {
    public static void main(String[] args) {
        int[] arr = {170,162,131,168,190};
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        System.out.println("最大的值是:"+max);
    }
}

标签:arr,int,System,数组,println,out
From: https://www.cnblogs.com/ygcDiary/p/17637062.html

相关文章

  • 线段树&树状数组
    P4246首先注意到两个点应该怎么联通,有可能直接走进去对吧,也有可能是绕一圈走过去,我们考虑整个在求连通性的时候最重要的是哪些点,是左上角,左下角,右上角和右下角,所以我们考虑维护他们之间的连通性。然后连通性很好合并,所以我我们可以把这个东西搬上线段树维护一大段区间的四个角互......
  • 差值数组不同的字符串
    给你一个字符串数组words,每一个字符串长度都相同,令所有字符串的长度都为n。每个字符串words[i]可以被转化为一个长度为n-1的差值整数数组difference[i],其中对于0<=j<=n-2有difference[i][j]=words[i][j+1]-words[i][j]。注意两个字母的差值定义为它们......
  • 稀疏数组
    稀疏数组条件-需求:编写五子棋游戏中,有存盘退出和续上盘的功能-分析:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据-解决:稀疏数组稀疏数组介绍-当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组-稀疏数组的处......
  • 数组使用
    数组使用For-Each循环数组做方法入参数组做返回值publicclassDemo{//打印数组元素publicstaticvoidprintArray(int[]arrays){for(inti=0;i<arrays.length;i++){System.out.println(arrays[i]+"");}}//......
  • 数组的四个基本特点
    数组的四个基本特点-数组长度是确定的,数组一旦被创建,它的大小就是不可改变-其元素必须是相同类型,不允许出现混合类型-数组中的元素可以是任何数据类型,包括基本类型和引用类型-数组变量属引用类型,数组也可以看成对象,数组中的每个元素相当于该对象的成员变量-数......
  • 数组三种初始化
    三种初始化-静态初始化int[]a={1,2,3};Man[]mans={newMan(1,1),newMan(2,2)};-动态初始化int[]a=newint[2];a[0]=1;a[1]=2;-数组的默认初始化-数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个......
  • 把数组对象最外层某个属性的值赋值给子集
    /**功能需求:把数组对象最外层某个属性的值赋值给子集*arr:要操作的数组对象*propertyName:要操作的属性名*value:用来保存最外层对象属性的值*/functionassignValueToChildren(arr,propertyName,value)......
  • 存图之边集数组
    边集数组核心思想使用结构体存储图的起来点终点以及边权,同时也是用了深度搜索。点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=100;intm,n,a,b,c;intvis[N];structen{ intu,v,w;}e[N];//边集voiddfs(intu){ vis[u]=true; for(inti=1......
  • 2.1 C++ STL 数组向量容器
    Vector容器是C++STL中的一个动态数组容器,可以在运行时动态地增加或减少其大小,存储相同数据类型的元素,提供了快速的随机访问和在末尾插入或删除元素的功能。该容器可以方便、灵活地代替数组,容器可以实现动态对数组扩容删除等各种复杂操作,其时间复杂度O(l)常数阶,其他元素的插入和删......
  • 2.1 C++ STL 数组向量容器
    Vector容器是C++STL中的一个动态数组容器,可以在运行时动态地增加或减少其大小,存储相同数据类型的元素,提供了快速的随机访问和在末尾插入或删除元素的功能。该容器可以方便、灵活地代替数组,容器可以实现动态对数组扩容删除等各种复杂操作,其时间复杂度O(l)常数阶,其他元素的插入和......