首页 Java java教程 [Java入门笔记]Java语言基础(五):数组

[Java入门笔记]Java语言基础(五):数组

Dec 22, 2016 am 11:33 AM

简介

数组可用用于存储存储多个数据,Java的数组要求所有的数组元素具有一种相同的数据类型。一旦数组初始化完成,数组在内存中的空间被固定下来,长度不可改变,即使把数组的元素清空,所占用的空间依然被保留。

生活案例:博物架

100.png

每一个物品架都是相同类型的物品,长度不变,即使把物品下架,物品架依然不会改变。

 

定义数组

101.png

使用数组4步走:

1、声明数组

Java中支持两种格式的数组定义格式:

类型[] 变量名; 类型 变量名[];

 例:

int[] a;int b[]; //两种方法都行,不过建议使用第一种。

 

声明数组也就相当于上面例子中购买了一个定制的物品架(数组)到博物馆中,但是还没有确定物品架的大小(数组的大小),也还没有往物品架上放东西(数组元素)。

2、分配空间

 分配空间也就是对数组进行初始化,初始化分为两种方式:

第一种:静态初始化

静态初始化的语法格式如下:

数据类型[] 变量名 = new 数据类型[]{数据1, 数据2,数据3,......};

 例:

int[] a = new int[]{4,2,64,12,3}; //将这些数存放在数组中,数组的大小(长度)为花括号中元素的数量,该例子中大小为5String[] b = new String[]{"张三", "李四", "王五"}; //所有数据的类型必须为定义的数据类型int[] c = {2,5,7}; //也可以使用这样的简写方式

 

这就如同购买一个定制的物品架回来,同时将展示品放到物品架中一起购买回来,而物品架的大小就有多少物品就就有多大。

第二种:动态初始化

动态初始化是只指定数组的大小,由系统为每个元素指定初始值得一种方式。语法格式如下:

数据类型[] 变量名 = new 数据类型[大小];

 

在这个格式中, 需要为其指定一个整数类型的数组大小,指定后,将确定数据的长度,数组能够存放多少元素。同时为所有元素指定一个默认初始值。

例:

int[] a = new int[5]; //定义一个数组,长度为5,也就是说,能够存放5个int类型的数据,同时,默认5个值初始化为0

 

初始化时默认值按以下规定设置:

byte,short,int、long默认为0;

float、double默认为0.0;

char默认为'\u0000';

boolean默认为false;

其他引用类型默认为null;

3、赋值

 尽管你已经初始化好了数组,但是我们还是可以通过通过赋值的方式改变里面的数据。那么已经初始化好了数组,确定了数组的大小,我们该如何为没一个数组元素赋值呢?

数组中还有一个下标的概念,数组初始化的时候,会为每个元素分配一个下标,就和物品展示架上的编号一样,我们可以通过下标为每个元素重新赋值。

数组的下标从0开始,也就是说,第一个元素的下标为0,至于为什么要从0开始,我们后面再探讨一下,我们先看看赋值的例子:

int[] a = new int[3]; //定义一个长度为3的int类型数组,里面3个元素值已默认为0;a[0] = 4; //设置第一个元素值为4a[1] = 5; //设置第二个元素值为5a[2] = 7; //设置第三个元素值为7

102.png

为什么数组下标从0开始?

首先我们需要知道的是,程序是在电脑内存中运行的,当我们的程序开始处理数据时,会在内存中开辟一个小小的空间用来存储数据,在代码中也就是定义一个变量,如:

int a = 5;

 

定义一个int类型变量,值为五,而在内存中表示为,在内存中分配一小块内存,命名为a,里面存的值为5。

103.png

而我们是如通过a这样一个变量名得到内存中的值得呢?是因为每一小块内存都会有一个地址,就如同我们居住的家有一个地址一样,通过这个地址,通过这个地址,就能知道里面住的是谁。

二数组在内存中是以相连的位置存储的,方便对数组的操作,我们看一个例子:

int[] b = new int[3]; //定义一个int类型的数组,长度为3,里面的元素默认值为0

 

 此时内存中是这样的:

104.png

数组中获得数据也是如此,如何知道b数组每个元素的数据呢?首先我们知道通过b这个数组在内存中的哪个位置,因为数组在内存中是一个相连的内存空间,所以b[0]的位置就等于b+0,而b[1]的位置就为b+1,b[2]=b+2,......以此类推,知道了数组所有元素的位置。而数组中第一个元素正好是在数组中开头的位置,用b[0]表示,则刚好是b表示的位置,而用1表示第一个元素的位置,则需要表示为a+1-1。

4、处理数据

在前面的内容中,我们已经定义了数组,初始化了数组,赋了值,那么如何使用数据呢,其实前面已经分析过,我们通过数组下标来为数组赋值,也通过数组下标得到每个数组元素的值。

int[] a = new int[3]; a[0] = 3; a[1] = 4; a[2] = 5; System.out.println(a[1]); //得到数组的第二个位置的值,将它输出//我们也可以通过循环遍历数组中每个元素for(int i = 0; i < a.length; i++){ System.out.println(a[i]); //循环打印出数组中每个元素}

 

在上面的例子中,循环打印的时候,我们看到,使用了a.length,通过 数组变量名.length 可以得到数组的长度,所以上面我们通过a.length得到数组的长度为3,循环3次,打印出数组的元素。

不应该访问不存在的下标

上面我们知道,我们控制数组是通过 变量名[下标] 来为变量赋值或者得到值,而如果访问超过了数组长度的下标时,则会出现异常。

int[] a = new int[2]; a[5] = 2; //a数组长度只有2个长度,而我们通过下标5访问第6个元素,实际a数组不存在这个位置,则会出现异常。

 

 

二维数组或多维数组

上面我们讲的都是在数组中存储一种基本数据类型或引用数据类型,而我们也可以在数组中存储数组:

105.png

上面我们在一个数组元素中存储了另外一个数组元素,里面那个数组存储了一种数据类型int的值,我们称这样的数组为二维数组。

二维数组的定义,初始化和赋值

数据类型[ ] [ ] 数组名 = new 数据类型[长度1][长度2] ;

 

长度1为外面一层数组的长度,长度2位里面一层的长度。

定义和初始化上图中的形式,我们可以这样:

int[][] a = new int[3][3]; a[0][0] = 2; //访问时前面一个方括号的数字表示外面一层数组的元素下标,第二个方括号的数字表示里面一层的数组的下标a[0][1] = 3; a[0][2] = 4; a[1][0] = 5; a[1][1] = 3; a[1][2] = 9; a[2][0] = 90; a[2][1] = 70; a[2][2] = 85;

 

 

 

我们也可以将二维数组定义成这样一种格式:

106.png

int[][] a = new int[3][]; //在定义初始化时设置外面一层长度为3,不设置里面一层的长度,
a[0] = new int[2]; //初始化里面每一层,设置长度a[1] = new int[1]; a[2] = new int[3]; a[0][0] = 3; //为每一个元素赋值a[0][1] = 4; a[1][0] = 9; a[2][0] = 90; a[2][1] = 70; a[2][2] = 85;


而三维数组就是数组里面的数组里面存放的是数组~~~~~以此类推可以有n多维数组,不过一般人使用的不多  ~~~^_^~~~

 以上就是[Java入门笔记]Java语言基础(五):数组的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1662
14
CakePHP 教程
1418
52
Laravel 教程
1311
25
PHP教程
1261
29
C# 教程
1234
24
如何使用 foreach 循环去除 PHP 数组中的重复元素? 如何使用 foreach 循环去除 PHP 数组中的重复元素? Apr 27, 2024 am 11:33 AM

使用foreach循环去除PHP数组中重复元素的方法如下:遍历数组,若元素已存在且当前位置不是第一个出现的位置,则删除它。举例而言,若数据库查询结果存在重复记录,可使用此方法去除,得到不含重复记录的结果。

PHP数组深度复制的艺术:使用不同方法实现完美复制 PHP数组深度复制的艺术:使用不同方法实现完美复制 May 01, 2024 pm 12:30 PM

PHP中深度复制数组的方法包括:使用json_decode和json_encode进行JSON编码和解码。使用array_map和clone进行深度复制键和值的副本。使用serialize和unserialize进行序列化和反序列化。

PHP 数组键值翻转:不同方法的性能对比分析 PHP 数组键值翻转:不同方法的性能对比分析 May 03, 2024 pm 09:03 PM

PHP数组键值翻转方法性能对比表明:array_flip()函数在大型数组(超过100万个元素)下比for循环性能更优,耗时更短。手动翻转键值的for循环方法耗时相对较长。

PHP数组多维排序实战:从简单到复杂场景 PHP数组多维排序实战:从简单到复杂场景 Apr 29, 2024 pm 09:12 PM

多维数组排序可分为单列排序和嵌套排序。单列排序可使用array_multisort()函数按列排序;嵌套排序需要递归函数遍历数组并排序。实战案例包括按产品名称排序和按销售量和价格复合排序。

PHP 数组分组函数在数据整理中的应用 PHP 数组分组函数在数据整理中的应用 May 04, 2024 pm 01:03 PM

PHP的array_group_by函数可根据键或闭包函数对数组中的元素分组,返回一个关联数组,其中键是组名,值是属于该组的元素数组。

深度复制PHP数组的最佳实践:探索高效的方法 深度复制PHP数组的最佳实践:探索高效的方法 Apr 30, 2024 pm 03:42 PM

在PHP中执行数组深度复制的最佳实践是:使用json_decode(json_encode($arr))将数组转换为JSON字符串,然后再将其转换回数组。使用unserialize(serialize($arr))将数组序列化为字符串,然后将其反序列化为新数组。使用RecursiveIteratorIterator迭代器对多维数组进行递归遍历。

PHP 数组分组函数在查找重复元素中的作用 PHP 数组分组函数在查找重复元素中的作用 May 05, 2024 am 09:21 AM

PHP的array_group()函数可用于按指定键对数组进行分组,以查找重复元素。该函数通过以下步骤工作:使用key_callback指定分组键。可选地使用value_callback确定分组值。对分组元素进行计数并识别重复项。因此,array_group()函数对于查找和处理重复元素非常有用。

探索 PHP 数组去重算法的复杂度 探索 PHP 数组去重算法的复杂度 Apr 28, 2024 pm 05:54 PM

PHP数组去重算法的复杂度:array_unique():O(n)array_flip()+array_keys():O(n)foreach循环:O(n^2)

See all articles