java:一维数组

  • 数组

    数组定义和访问

    容器的概念

    ​ 容器: 就是将多个数据存储到一起,每个数据称为该数据的元素.

    数组概念

    ​ 数组就是存储数据长度固定的容器,保证每个数据的数据类型要一致.

    数组的定义

    方式1:

    ​ 格式:

    数组存储的数据类型[]  数组名称 = new 数组存储的数据类型[长度(>=0的整数)];
    

    ​ 解析:

    ​ 数组存储的数据类型:决定了该数组容器能够存储什么样的数据

    ​ [ ] 表示数组

    ​ 数组名称:给定义数组起一个变量的名字,满足标识符的命名规范

    ​ new : 关键字,创建数组使用的关键字。

    ​ 数组存储的数据类型:决定了该数组容器能够存储什么样的数据

    ​ [长度] : 数组的长度 表示数组中能够存储多少个元素

    ​ 备注: 数组一旦创建,长度不能发生改变,数组具备一个[定长特性]。

    方式2:

    格式:

      数组的数据类型[] 数组名称= new 数组的数据类型[] {元素1,元素2,...};
    

    方式3

    ​ 格式:

  ``
  数组的数据类型[] 数组名称 = {元素1,元素2,....};
  例如:
    String[] names = {"陈杨","夏凡","你爹"};
    char[] sex ={"男","女","无"};
  

数组的特点:

1.数组的长度在程序运行期间不可改变.

2.数组本身就是一种引用数据类型

3.数组定义时是引用数据类型,但是数组容器里面存储的元素可以是基本数据类型也可以是引用数据类型

4.数组当中存储的多个数据,类型保持一致

数组初始化: 在内存当中创建了一个数组,并且向数组容器中赋予一些默认值

默认值:

​ 对于int整数类型来说,默认值是0

​ 对于浮点数类型来说,默认值是0.0

​ 对于字符类型来说,默认值是"\u0000"显现是一个空格

​ 对于布尔类型来说,默认值是false

​ 对于引用类型来说,默认值是null

两种常见的初始化动作:

  1. 静态初始化(指定内容): 在创建数组的时候,不指定数组的长度(存储元素的个数),而是直接指定具体的【内容】

  2. 动态初始化(指定长度):在创建数组的时候,直接指定数组的长度(存储元素的个数).

 备注:静态初始化虽然没有直接指定长度,但是程序会推算得到该数组的长度.

 建议

​ 如果不确定数组当中存储的内容时,用动态初始化,反之内容已经确定了,使用静态初始化.

​ 大多数情况下,建议使用动态初始化.

数组的访问:

​ 索引:下标

​ 每一个存储到数组当中的元素,都会自动的分配一个编号,从[0]开始,这个系统自动分配的编号称为数组的索引

(index),可以通过索引访问数组当中的元素.

​ 格式:

  数组名称[索引]  

数组的长度属性

 每个数组都有长度,而且是固定的,Java会自动赋给数组一个属性,可以获取到数组的长度属性

​ 格式:

​ 数组名称.length

​ 属性length代表的就是数组的长度,int类型 数组的最大索引值 :[数组名称.length-1]

索引访问数组当中的元素操作

​ 修改数组当中索引对应上的值: 数组名[索引] = 数值;

​ 变量 = 数组名称[索引], 从数组当中取出一个数值赋值给一个变量

数组原理内存

 内存

​ 内存是计算机中一个很重要的原件,临时存储区域,作用是当程序运行过程中,我们编写的代码文件存放在硬盘当中,硬盘当中的程序文件不会运行,存放到内存当中,当程序运行完毕后程序会清空内存.

Java虚拟机当中的内存划分

为了提高运行效率,就对内存空间进行不同区域的划分,每一片区域都有特定的处理数据方式和内存管理方式

JVM内存划分

区域名称作用
寄存器给cpu使用,和我们开发没有关系
本地方法栈JVM在使用操作系统功能时使用的,和我们的开发没有关系
方法区存储可以运行的class文件(常量值,静态域)
方法栈(stack)方法运行时使用的内存,比如说main方法,进入方法栈当中运行
堆内存(heap)存储对象或者数组,new出来的对象,都统统存储在对内存当中

数组在内存当中的存储

public static void main(String[] args){
    int[] arr = new int[3];
    System.out.println(arr);//内存当中的哈希值 
}

​ 程序执行流程

  1. main方法进入方法栈中执行
  2. 创建数组,JVM会在堆内存当中开辟空间,存储数组
  3. 数组在内存当中会有自己的内存地址,以十六进制表示
  4. 数组当中有三个元素,默认值为0
  5. JVM将数组的内存地址赋值给引用类型变量arr
  6. 变量arr保存的数组是在内存当中的地址,而不是具体的值

两个变量指向同一个数组、

public static void main(String[] args){
    // 定义一个数组动态初始化
    int[] arr = new int[3];
    // 通过索引访问数组当中的元素
    arr[0] = 10;
    arr[1] = 20;
    arr[2] = 30;
    // 查看第二个元素
    System.out.println(arr[1]);
    int[] arr2 = arr;
    arr2[1] = 50;    
    System.out.println(arr[1]);
    
}

数组的常见操作

​ 数组的越界异常操作

 public static void main(String[] args){
     int[] arr = new int[5];
     System.out.println(arr[5]);
 }

数组索引是从0开始,最大索引值是arr.length-1 [0,arr.length-1 ]

如果访问数组元素时,索引值不在该区间中,程序就会抛出数组索引越界异常

在开发中,不要出现索引越界异常现象,因为它在导致程序异常终止

public static void main(String[] args){
  int[] arr = new int[3];
    arr = null;
     System.out.println(arr[2]);
}

数组的空指针异常,就是在程序运行过程中,有一个在内存当中不存在的一个变量被引用到了

数组遍历【重点】

数组遍历:就是将数组中的每一个元素分别获取出来,就是遍历,遍历是我们操作数组的核心和重点内容.

public static void main(String[] args){
    int[] arr ={1,2,3,4};
    for(int i = 0; i <= arr.length-1; i++){
        System.out.println(arr[i]);
    } 
}

获取数组当中最大值元素

1.定义一个最大值变量:从数组的所有元素找出那个最大值(数组当中索引值为0)

2.遍历数组,获取数组当中的每一个元素

3.将遍历到的元素和保存的最大值变量进行比较

4.如果数组元素的大于最大值变量,就把数组元素赋值给最大值变量

5.数组遍历结束,最大值变量保存的就是数组中最大值

public static void main(String[] args){
        int[] arr = {1, 2, 5, 6, 9, 54, 65};
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        System.out.println(max);
}

数组的反转

​ 数组的反转:数组中的元素颠倒顺序,例如元素数组为1,2,3,4,5,数组反转之后为5,4,3,2,1

​ 思路:本质是考察交换两个变量的值 两种操作

​ 实现反转,就需要将数组最远端的元素位置和最近端位置互换

​ 定义两个变量,保存数组的最小索引和数组的最大索引

​ 让两个索引上的元素交换位置

​ 最小的索引变量++ 最大的索引变量-- 再次交换位置

​ 最小的索引超过了最大索引,数组实现反转

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值