JAVA数组学习总结

  数组的定义与使用

  一、数组的定义:相同数据类型的集合,数组在内存中是连续空间,Java中,数组是引用数据类型,在堆中存储。其特性有四点,1.在数组中存放的元素类型是相同的,2.数组的空间是连续的,一个元素和一个元素之间是紧挨的,3.每个数组元素都有编号,第一个位置编号从0开始,即数组的小标从0开始,4.数组的长度一旦定义之后就是固定的,数组定长。

  数组的创建及初始化,1.静态初始化,定义数组时,随即将每个元素的值也初始化好,语法为:

数组类型[] 数组名称 = {元素值1,元素值2,....元素值N};示例:创建一个包含数字1,3,5,7,9的静态数组,

 2.动态初始化,定义数组时,不给元素具体赋值,定义之后再赋值,数组中每个元素都是其数据类型的默认值,语法为:数据类型[] 数组名称 = new 数据类型[数组长度];示例:创建一个长度为5的动态数组,

   二、数组的基本使用

  1.数组中元素的访问,由于数组在内存中是一块连续的内存空间,且每个数组元素都有编号,元素的编号我们称为数组的偏移量,第一个元素的编号为0,程序只需要记录第一个元素的地址(数组的首地址)即可,无需保存每个元素的内存地址,根据首地址以及元素编号就可以立即取得任意一个元素的地址。数组中元素的下标为[0...N],N就是数组的长度,数组中最后一个元素的下标为  N-1,我们要访问数组中任意一个元素,只需根据数组名称 + 下标,即可立即取得,但要注意下标的合法性问题,即下标的大小不能超过N-1,示例如下:

 我们还可以通过数组名称.length属性取得数组的长度,就可以根据数组长度循环遍历数组的每一个元素,如下:用for循环来遍历数组1的每个元素

 若我们只需要取得数组元素,不修改,可以用for-each循环来遍历,如下:

三.堆区和栈区

  数组,类,接口都属于引用数据类型,所有的引用数据类型的变量,保存的都是一块堆内存的地址,不是具体数值,而它的对象也保存在对结构中,所谓的引用只不过是给对象起了个别名而已。

  栈区保存的是方法的栈帧,每个方法的调用以及结束,就对应一个方法栈帧的入栈以及出栈过程,方法中的所有局部变量都保存在栈帧中。

四.数组的使用

  数组是不能直接输出的,直接输出只会得到其加密后的地址,要想输出数组可以自建个方法,调用方法输出,或者用数组相关的工具类Arrays中的toString方法,如下:

   要想拷贝数组就可以用工具类Arrays中的copyOf方法,要是只想拷贝一部分的话,就用copyOfRange方法,如下:

 在数组中有一些很经典的问题,例如在数组中查找是否存在指定数值的元素,这个问题有很多种解法,但其中最经典的就是二分查找法,二分查找法可以很大的提高我们寻找的时间和效率,二分查找法就是在有序数组中每回取数组中间那个数与指定数值进行比较,代码如下:

 二分查找法,也可以用递归的思想来解决问题,用递归的思想写出来的代码如下:

 

 还有就是在不创建新的数组的情况下逆序输出一个数组,其思想就是让数组最左边和最右边的数相互交换位置,然后左右都往前移一位,再继续交换,知道数组的中间结束,代码如下:

   还有就是将一个数组的元素进行排列,数组中的所有偶数放在所有奇数前面,其思想就是让左边元素的下标left从左向右扫描,扫到第一个奇数就停止,让右边元素的下标right从右向左扫描,扫到第一个偶数就停止,然后让它两个的元素交换位置,依次往下用while循环,直到当left >= right时循环结束,代码如下:

 我们上面说的数组都是一维数组,但是按照定义我们还有二维数组,三维数组等等,但基本上都用不上,只有二维数组偶尔会用到,二维数组就可以看作是一个表格,有行和列,二维数组的遍历如下:

 以上就是我学习Java数组部分所总结的知识点,如有不对的地方,欢迎大家指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值