数组无论在哪种编程语言中都算是最重要的数据结构之一,同时不同语言的实现及处理也不尽相同。但凡写过一些程序的人都知道数组的价值及理解数组的重要性,与链表一道,数组成为了基本的数据结构。尽管Java提供了很棒的集合API和集合类如:ArrayList、HashMap,他们内部都是基于数组。如果你是来自于基于c或c++背景的程序员,那么你会发现一些关于数组的行为和如何在Java工作中的异同。最值得注意的是C中的数组与Java中的数组的边界检查,c编译器不检查如果程序访问无效的数组索引,而java如果程序尝试访问无效的数组索引的话jvm会抛出ArrayIndexOutOfBoundException。在这篇文章中,我们看看Java中的数组,包括原生类型和对象类型的数组,下面就介绍些有关Java数组及属性的知识点。

Java数组101

(译注:101指介绍某件事,读者不需要任何预备知识)

1)数组在Java中是一个对象,数组实例同样是使用new操作符创建的。Array.length指定了数组长度,例如:

Array.length 表示数组的容量,只要数组创建了,每一个索引被初始化为默认值。

2)数组索引起始为0,负数索引在Java中是无效的,会抛出ArrayIndexOutOfBoundException ,如果你尝试用无效的索引访问数组,这个无效的索引可能是一个负索引,或者是大于等于数组长度的索引。

3)数组存储在Java堆的连续内存空间,所以如果你创建一个大的索引,你可以有足够的堆空间直到抛出OutofmemoryError,因为请求的内存大小在连续的内存空间不可用。

4)数组一个固定长度 的数据结构,一旦声明,你不能改变数组的长度。

5)不同类型的数组有不同的类型,例如下面例子,intArray.getClass()不同于floatArray.getClass()

如果尝试在运行时做这个操作,那么Java抛出ArrayStoreException

7)在Java数组中可以有不同方式的创建方式,这里就是创建数组的例子:

你既可以选择在创建数组的时候初始化数组,也可以以后通过for循环初始化,中括号既可以在变量的前面也可以在变量后面。

第一种方法是方便的创建多个数组如:

int[] array1, array2

这里的array1和array2是整型数组,而第二种方法你需要放两次括号如:

int array1[], array2[]

尽管在风格上没有很多不同,我读“int[] ”叫int数组,这种写法更容易被理解。

8)如果没有明确的初始化数组元素,那么数组就会用默认的类型值初始化,例如假若没有初始化整型数组,元素都将默认值为0,没有初始化的boolean值是false,对象数组是null。

9)你可以通过使用[]操作符访问数组元素,因为数组索引起始于0,[0]返回第一个元素,[length-1]返回最后一个元素,for循环是一种迭代整个数组便捷方法。你可以使用for循环初始化整个数组、访问的每个索引或更新、获取数组元素。Java5同样提供了加强的for循环,数组自己管理索引,防止ArrayIndexOutOfBoundException,这里是一个迭代的例子:

传统的方式:

加强的for循环

正如你看到的,加强的for循环不需要检查数组索引,如果你想逐个地访问所有的元素这是一种很好的方法,但是同时因为你不能访问索引,你就不能修改数组元素。

10)Java中数组可以轻易的转换成ArrayList。ArrayList一个基于索引的集合,它是作为数组的备选方案。ArrayList的优点是可以改变容量大小,只需要创建个更大的数组然后拷贝内容到新数组,但你不能改变数组的大小。

11)Java API同样提供了一些便捷方法通过java.utils.Arrays类去操作数组,通过使用Arrays你可以排序数组,你可以做二分搜索。

12)java.lang.System类提供了实用方法拷贝元素到另一个数组。在拷贝内容从一个数组到另一个数组的时候System.arrayCopy非常强大和灵活。你可以拷贝整个或子数组,具体看你的需求。

System.arraycoy语法:

如你所见,arraycopy允许我们指定索引和长度,能很灵活给你拷贝子数组和存储到需要的位置或目标数组。这里是一个例子,拷贝前三个元素到目标数组:

你可以看到拷贝之前所有元素是0,之后前三个元素被替换了。

13)Java同样支持多维数组,在表示2D和3D的时候非常有用,像行和列或矩阵。多维数组也是一个数组的数组,这里是创建多维数组的例子:

这是数组有2行3列,或者说长度是2的数组中,它的每个元素里保存的是长度为3的数组,这里是初始化多维数组的例子:

14)数组是一种非常快的数据结构,如果你已经知道元素的长度,那么就应该使用数组而非ArrayList等数据结构。

以上就是所有关于数组的话题,如你所见,数组是一种非常强大的数据结构。

java数组更新_java数组相关推荐

  1. java 数组 反射_java数组的反射

    java数组的反射,有一个JAVA API类可以运用:java.lang.reflect.Array 具体应用: 1:判断一个对象是否是数组: int arr[] = {1,2,3}; Class c ...

  2. java数组解析_Java - 数组解析

    一.什么是数组 数组?什么是数组?在我印象中的数组是应该这样的:通过new关键字创建并组装他们,通过使用整形索引值访问它的元素,并且它的尺寸是不可变的! 但是这只是数组的最表面的东西!深一点?就是这样 ...

  3. Java数组参考_Java数组

    数组变量 VS 数组对象 先看一例子: int[] primitiveArray; //在栈中声明了一个引用变量,暂时还没指向任何对象 primitiveArray = new int[5]; //在 ...

  4. java 数组协变_java 数组协变

    标签: 在某些情况下,即使某个对象不是数组的基类型,我们也可以把它赋值给数组元素.这种属性叫做协变(covariance).在下面的情况下可以使用协变: 数组是引用类型数组. 在赋值的对象类型和数组基 ...

  5. java类型的数组初始化_java数组初始化详解

    介绍 学习Java的朋友想必对数组并不陌生,它需要使用之前对其进行初始化,这是因为数组是引用类型,声明数组只是声明一个引用类型的变量,并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中就可使 ...

  6. java 数组成员_java 数组中含有

    <数据结构与抽象:Java语言描述(原书第4版)>一2.2.1 可变大小数组 本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,第2.2. ...

  7. java定义数组范围_Java数组的定义和使用

    为什么需要数组? 问题:我们要计算30个学生的平均分 如果没有数组,我们的代码是这样的 int score1 = 32; int score2 = 56; int score3 = 78; //--此 ...

  8. java 定义数组属性_Java数组的定义与使用

    一.数组概念 可以将多个同一数据类型的数据,存储到同一个容器中 1. 格式 数据类型[] 数组名=new 数据类型[元素个数] "数据类型"表示该数组中可以存放哪一类型的数据 &q ...

  9. java合法的数组声明_Java数组详解

    Java数组详解 数组详解 1.数组概述 数组是相同类型数据的有序集合 每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们 2.数组声明和创建 ①数组声明形式 dataType[] a ...

最新文章

  1. Java伪界面操作数据库的小实例
  2. matlab作图如何改变坐标刻度
  3. python下载百度云盘中的数据_python爬虫:爬取百度云盘资料,保存下载地址、链接标题、链接详情...
  4. 探秘 Dubbo 的度量统计基础设施 - Dubbo Metrics
  5. Android项目跑不起来,本机的android虚拟机跑不起android小项目
  6. https://sysdig.com/blog/
  7. C++项目中编译部分C的代码
  8. python中sys.argv的使用
  9. 51单片机 code关键字
  10. 卓岚APP远程采集正泰单相电子式电能表 ZLAN5144J的应用分享
  11. 软件开发文档的编写---软件研制任务书 (2015-03-14 17:55:03)转载▼ 标签: 软件 文档 任务书 需求 要求 分类: 软件过程改进 一. 简介 客户要
  12. adams如何保存_实用的Adams使用技巧
  13. 大数据数据挖掘与云计算-认识大数据
  14. 自适应屏幕空间环境光遮蔽
  15. 编程基础巩固——英语单词记忆技巧
  16. ElasticSearch聚合基础使用《玩转ElasticSearch 4》
  17. 用Python编程语言来实现阿姆斯特朗数的检查
  18. 京东登月机器学习平台 团队_发展您的安全团队并让机器人来完成工作
  19. 利用excel与Pandas完成实现数据透视表(文末赠书)
  20. 如何将阿里图标库的引入项目中?

热门文章

  1. 微信小程序web-view嵌入h5页面,分享当前页
  2. matlab的缺失值处理---插值自动填充
  3. 【SQL高级教程】数据库学习笔记
  4. 文献阅读:RoFormer: Enhanced Transformer with Rotary Position Embedding
  5. 遇见大数据可视化:基础研究
  6. 生活是首歌而我老跑调
  7. html onfoucs状态事件,onfocus
  8. qdu 2017级纳新题(扩展欧几里得)
  9. 3万字100道大数据技术之高频面试题总结(附答案)
  10. 50个令人耳目一新的网页纹理设计