数组概述
数组是具有相同数据类型的一组数据的集合。数组中的每个元素具有相同的数据类型。在Java中同样将数组看作一个对象,虽然基本数据类型不是对象,但由基本数据类型组成的数组却是对象。在程序设计中引入数组可以更有效地管理和处理数据。
一维数组
一维数组实质上是一组相同类型数据地线性集合,当在程序中需要处理一组数据,或者传递一组数据时,可以应用这种数组。
一、创建一维数组
数组作为对象允许使用new关键字进行内存分配。在使用数组之前,必须首先定义数组变量所属的类型。
1、先声明,再用new关键字进行内存分配
声明一维数组两种方式:
数组元素类型 数组名字[];
数组元素类型[] 数组名字;
2、为数组分配内存同时设置初始值
数组元素的类型 数组名=new数组元素类型[数组元素的个数]{值1,值2...};
二、使用一维数组
使用一维数组输出1~12月每个月份的天数,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/a1b0699fd6215f483535818694fd3650.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/f25166af14c92bbb62e6886fb5a665dd.png)
使用一维数组容易遇到数组越界问题
使用foreach语句遍历整数数组,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/ea09cb3542dd05df26a02d904b58d94f.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/d25bd74a368a4fba5dea5cbcdbc1b253.png)
二维数组
一、创建二维数组
1、先声明,再用new关键字进行内存分配
数组元素的类型 数组名字[行数][列数];
数组元素的类型[行数][列数 数组名字;
2、为数组分配内存同时设置初始值
数组名=new 数组元素的类型[][]{{值1,值2...},{值1,值2...}}
二、使用二位数组
输出一个3行4列且所有元素都为0的矩阵,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/1b6f0572c567bf92c9055296972504f6.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/02f4e392367af7f7652bfa47a9af16be.png)
数组的基本操作
一、遍历数组
遍历数组就是获取数组中的每个元素。通常遍历数组都是使用for循环来实现。
使用foreach语句遍历二维数组,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/4ac8d2d1aacaa94f86fa496b4956a05c.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/56df47191842b1a3c5046959b835d502.png)
二 、填充替换数组元素
数组中的元素定义完成后。可通过Arrays类的静态方法fill()来对数组中的元素进行替换。该方法通过各种重载形式可完成对任意类型的数组元素的替换。
替换数组部分元素:前改后不改
使用fill()方法填充数组元素 ,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/1c1dddc175545dc52f2cea1536d981e4.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/ded9f53714afad43ad781b7893fc8cf1.png)
使用fill()方法替换数组中的元素,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/eccaec77fa6cd88f4fc40d20e7cadfb5.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/72abd8ac5d5372583e52368fa0079f30.png)
三、对数组进行排序
通过Arrays类的静态方法sort()可以实现对数的排序。sort()方法提供了多种重载形式,可以对任意类型的数组进行升序排序。
使用sort()方法将数组排序后输出 ,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/1b604ae9bac8faa204a7ade42a5b93f4.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/3ded7372fbfd7f1d995b7940bc3ff7b5.png)
四、复制数组
Arrays类的copyOf()方法与copyOfRange()方法可以实现对数组的复制。copyOf()方法是复制数组至指定长度,copyOfRange()方法则将指定数组的指定长度复制到一个新数组中。
复制数组元素:空位补0,溢出去掉
复制数组部分元素:前在后不在
复制shu
1、copyOf()方法
复制数组,实现将此数组复制得到一个长度为5的新数组,并将新数组输出,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/285fef298234f54eb899a01057bc23a7.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/75c22a51aff7eb872647856e9f529322.png)
2、copyOfRange()方法
按照索引复制数组,并将数组中索引位置 是0~3的元素复制到新数组中,最后将新数组输出,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/16ccca47d353bad3a9cdf345060cf8b6.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/47b20fa59ee3ac8a36ae2c1c78827dc9.png)
五、 查询数组
Arrays类的binarySearch()方法,可使用二分法搜索指定数组,以获得指定对象。该方法返回要搜索要搜索的索引值。binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要。
查询数组元素:先排序在查询,前含后不含
查找元素在数组中的索引位置,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/34f8895f79741fa3add8d54e3b20f7da.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/0bf4db61c55e28f4c2d4328d2d0d2306.png)
在指定范围内查找元素在数组中的索引位置,代码如下
![](https://img-blog.csdnimg.cn/img_convert/e3f44299faf80dbc32e3899528701ab3.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/0a505da1080250fe71c9f13fa139db69.png)
数组排序算法
一、冒泡排序
冒泡排序的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把较大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
对一个int型的一维数组中的元素进行冒泡排序,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/b9c755036fe3268f8b3b12a8505b127c.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/93e87de16309b7d0f15af12c716887c1.png)
二、直接选择排序
直接选择排序的基本思想是将指定排序位置元素与其他数组元素分别对比,如果满足条件就交换元素值。
注意这里与冒泡排序的区别,不是交换相邻元素,而是把满足条件的元素与指定的排序位置元素交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,直至整个数组都变成已排序好的格式。
对一个int型的一维数组中的元素进行直接选择排序,代码如下:
![](https://img-blog.csdnimg.cn/img_convert/73798750f421fcbc600361dbb680c86a.png)
运行结果
![](https://img-blog.csdnimg.cn/img_convert/3e9350c8a2ce70820316977d4bad3040.png)