【个人笔记/Java】JavaSE(三)数组

数组概述

Java中的数组定义如下:

  • 相同类型数据的有序集合
  • 相同类型的若干数据,按照一定的先后次序排列组合而成
  • 每个数据称之为一个数组元素,每个数组元素可以通过一个下标来访问它们

数组的声明创建

  • 首先声明数组变量,才能在程序中使用数组。下面时声明数组变量的语法:
    dataType[] arrarRefVar; //首选的方法
    dataType arrayRefVar[]; //效果相同,但不推荐
    
  • Java语言中使用new的操作符来创建数组,语法如下:
    dataType[] arrayRefVar = new dataType[arraySize];
    
  • 数组元素通过索引访问,数组索引从0开始
  • 获取数组长度:
    arrays.length
    

测试code:

public class ArrayDemo {
    //变量类型  变量名字 = 变量的值

    public static void main(String[] args) {
        int[] nums; //定义,Java风格 1.声明一个数组
        // int nums2[]; //C/C++风格

        nums = new int[10]; //这里可以存放10个int类型的数据 2.创建一个数组

        //3.给数组元素赋值
        nums[0] = 1;
        nums[1] = 2;
        nums[2] = 3;
        nums[3] = 4;
        nums[4] = 5;
        nums[5] = 6;
        nums[6] = 7;
        nums[7] = 8;
        nums[8] = 9;
        nums[9] = 10;

        //计算所有元素的和
        int sum = 0;
        for (int i =0; i<nums.length; i++){
            sum = sum + nums[i];
        }
        System.out.println(sum);
    }
}

在这里插入图片描述

数组的使用

  • 普通的For循环
  • For-Each循环(arrays.for
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};
        //JDK1.5 没有下标
        for (int array : arrays) {
            System.out.println(array);//1 2 3 4 5
        }
    }
    
    在这里插入图片描述
  • 数组作为方法入参
  • 数组作返回值

多维数组

多维数组可以看成是数组的数组,例如二维数组:

int a[][] = new int[2][5];//两行五列的数组

Arrays类

  • 数组工具类:java.util.Arrays
  • API提供的工具类供我们使用
  • 通过查看JDK文档
  • Arrays类中的方法都是static修饰的静态方法,在使用的时候直接用类名进行调用,不用使用对象来调用

常用功能:

  • 给数组赋值:通过fill方法
  • 对数组排序:通过sort方法,按升序
  • 比较数组:通过equals方法比较数组中元素值是否相等
  • 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找操作

数组的四个基本特点

  • 长度确定,一旦被创建,它的大小就不可以改变
  • 元素类型必须相同,不允许出现混合类型
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型
  • 数组变量属于引用类型,数组也可以看作是对象,数组中的每一个元素相当于该对象的成员变量,数组本身就是对象,Java中对象在堆中,因此数组无论保存原始数据类型还是其他对象类型,数组对象本身是在堆中

数组边界

  • 下标的合法区间:[0,length-1],如果越界就会报错;
  • ArrayIndexOutOfBoundsException:数组下标越界异常!
  • 数组长度是确定的,不可变。如果越界,则报:ArrayIndexOutOfBounds

稀疏数组

  • 当一个数组中大部分元素为0,或者为同一数组时,可以使用稀疏数组来保存该数组
  • 稀疏数组的处理方式:
    • 记录数组一共有几行几列,有多少个不同的值
    • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
  • 如图
    在这里插入图片描述

番外 Java内存分析

Java内存一般有以下三种:

  • 栈(Java Virtual Machine Stacks)
  • 堆(Heap Memory)
  • 方法区(Method Area)

栈帧
一个栈帧随着一个方法的调用开始而创建,方法调用完成而销毁。栈帧内存存放方法中的局部变量,操作数栈等数据。
Java栈对栈帧进行存储、压栈和出栈操作。

在这里插入图片描述
当线程执行一个方法时,就会随之创建一个对应的栈帧,并将建立的栈帧压栈。当方法执行完毕之后,便会将栈帧出栈。

堆区是用来存放对象和数组,随着JVM的启动而创建。

  1. 堆区存储的全部是对象
  2. JVM只有一个堆区,被所有线程共享
  3. 堆区是可以动态地分配内存大小,它在运行时动态分配内存,Java的垃圾收集器会自动收走这些不再使用的数据。
  4. 缺点:由于要在运行时动态分配内存,存取速度较慢。

方法区

它方区和堆一样,是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值