数组(详细版)

学习目标

1、掌握一维数组的定义和基本使用
2、理解数组的内存结构原理
3、掌握二维数组的定义和基本使用
4、掌握数组的基本算法和实现
5、掌握数组工具类Arrays的使用

第1章 数组概述

1.1 数组介绍

现在假如要统计我们班的学生姓名情况,用前面所学的知识,我们可能需要先声明n多个个变量来分别记住每个学生的姓名,这样做会显得很麻烦,而且容易出错。因此我们可以使用容器进行操作。将所有的数据全部存储到一个容器中,统一操作。

因此,这就引出了一个容器的概念。

容器概念:

  • **容器:**是将多个数据存储到一起,每个数据称为该容器的元素。
  • **生活中的容器:**水杯,衣柜,教室

Java从容器的角度衍生出了针对数据存储的Java容器:数组。

数组介绍:

  • 数组概念: 数组就是数据类型一致、数据长度固定的用来存储连续数据的容器。

1.2 数组的分类

前面介绍了,数组就是存放数据类型一致、长度固定的容器,而我们的数据类型又分为基本数据类型和引用数据类型。因此,数组中可以存放一些基本数据类型数据,比如int、long,也可以存放引用数据类型,比如String、类、甚至是数组本身。也就是说,数组里面甚至可以嵌套数组,因此Java数组可以分为一维数组、二维数组、。。。多为数组。

开发中,最常用的还是一维数组以及二维数组。二维数组顾名思义,就是在一维数组中的每一个元素类型又是一个数组(类似之前学习的嵌套for循环)。

第2章 一维数组的基本操作

2.1 一维数组的定义

数组的定义有三种方式。

1. 方式一
  • 格式:
 数据类型[] 数组名 = new 数据类型[长度];
  • 数组定义格式详解:
    • 数据类型: 创建的数组容器可以存储什么数据类型,所有数据类型都可以存储。
    • [] : 表示数组。
    • 数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
    • new:关键字,创建数组使用的关键字。
    • [长度]:数组的长度,表示数组容器中可以存储多少个元素。
    • 注意:数组有定长特性,长度一旦指定,不可更改。
      • 和水杯道理相同,买了一个2升的水杯,总容量就是2升,不能多也不能少。
  • 举例:

定义可以存储6个整数的数组容器,代码如下:

int[] array = new int[6];
2.方式二
  • 格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
  • 举例:

定义存储1,2,3,4,5,6整数的数组容器。

int[] arr = new int[]{1,2,3,4,5,6};
3.方式三
  • 格式:
数据类型[] 数组名 = {元素1,元素2,元素3...};
  • 举例:

定义存储1,2,3,4,5,6整数的数组容器。

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

说明:

上面定义数组并初始化的时候,都是使用int[] arr这种形式,Java数组还支持int arr[] 这种形式的定义。

2.2 数组的基本操作

数组是存储一类元素的,有了数组就方便进行元素统一管理,下面介绍一下数组的基本操作。

2.2.1 数组相关概念说明

  • 索引: 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
    • 格式:
数组名[索引]
  • 数组的长度属性: 每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度,语句为:数组名.length ,属性length的执行结果是数组的长度,int类型结果。由次可以推断出,数组的最大索引值为数组名.length-1

2.2.2 数组基本操作

数组创建后,涉及到数组的对应位置元素的初始化、元素的修改、元素的获取。

	public static void main(String[] args) {
   
		// 定义一个定长数组
		int[] array = new int[3];
		// 1、元素赋值
		array[0]=1;
		array[1]=2;
		array[2]=3;
		
		// 2、元素修改
		array[0]=11;
		
		// 3、元素获取
		int a=array[0];
		
		// 打印数组,Arrays先了解即可
		System.out.println(Arrays.toString(array));
	}

**注意:**因为数组长度固定,因此数组本身无法添加或者移除元素,但是我们可以在原数组的基础上复制一份数组来改变其长度和元素。

2.2.3 数组初始化值介绍

在前面章节学习java变量的时候介绍过,定义的变量如果没有初始化赋值是不能使用的,否则编译报错。而今天学习的数组,内部可以存放各种数据类型,如果没有初始化赋值是否会报错呢?

	public static void main(String[] args) {
   
		// 定义一个定长数组
		int[] array = new int[3];
		
		System.out.println(array[0]); // 0
	}

上面示例结果没有报错,且输出结果为0,测试发现没有初始化赋值的int类型数组每一个位置都有个默认值0。

所以,这里要强调的是数组作为一个引用数据类型,内部可以存放各种类型元素,如果没有进行初始化赋值,都会有一个默认初始化值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-snnxBaLj-1632745926130)(imgs/image-20200609163431552.png)]

2.3 数组原理分析

2.3.1 内存概述

内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。

Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

2.3.2 Java虚拟机的内存划分

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

**官方文档地址:**https://docs.oracle.com/javase/specs/jvms/se8/html/index.html
在这里插入图片描述

内存区域说明:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值