数组
来源:互联网 发布:开源电商erp系统源码 编辑:程序博客网 时间:2024/06/06 00:33
数组是最为常用的一种数据结构,是不相同类型的,用一个标识符封装到一起的基本类型数据序列或对象序列。可以用一个统一的数组名和下标来唯一确定数组中的元素。实质上数组是一个简单的线性序列,因此数组访问起来很快。
一、数组概述:
数组是具有相同数据类型的一组数据的集合。当使用的变量很多时,而且数据类型相同时,逐个声明特别麻烦,这时可以声明一个数组,然后对数组进行操作,从而减少操作。Java语言中虽然基本数据类型不是对象,但是由于基本数据类型组成的数组则是对象,所以在程序设计中引入数组可以更有效地管理和处理数据。
数组根据维数的不同分为一维数组、二维数组和多维数组,一般来讲,一维数组的每个基本单元都是基本数据类型的数据,二维数组就是每个基本单元是一维数组的一维数组,依次类推,n维数组就是每个基本单元都是(n-1)维数组的(n-1)维数组。
二、一维数组
一维数组实质上是一组相同类型数据的集合,当需要在程序中处理一组数据或者传递一组数据时,可以应用这种类型的数组。
1.1创建一维数组
声明数组
数组作为对象允许使用new关键字进行内存分配。在使用数组之前,必须首先定义数组变量所属的类型,即声明数组。//声明数组有两种形式:数组元素类型 数组名字[];数组元素类型[] 数组名字;//声明一维数组int arr[]; //声明int型数组,数组中的每个元素都是int型数值。String[] str; //声明String型数组,数组中每个元素都是String型数值。
为数组分配内存空间
声明数组后,还不能访问它的任何元素,因为声明数组仅仅是给出了数组名字和元素的数据类理,要想真正的使用数组还要为其分配内存空间,且分配内存时必须指明数组的长度。//分配内存空间的格式数组名字 = new 数组元素类型[数组元素的个数];//为数组分配内存arr = new int[5]; //为int型的数组arr分配了5个数组长度//使用new关键字为数组分配内存时,数组各个元素的初始值都为0;
声明数组并为数组分配内存空间
创建数组和分配内存不一定要分开执行,可以在创建数组时直接为变量赋值。//语法格式数组元素类型 数组名[]=new 数组元素类型[数组元素的个数];//声明一维数组并分配内存int month[] = new int[12]; //一般程序编程都使用这种方式。
初始化一维数组
数组可以与基本数据类型一样进行初始化操作,数组的初始化可分别初始化数组中的每个元素。数组的初始化有两种形式//两种方法初始化一维数组int arr[] = new int[]{1,2,3,4,5,23}; //第一种初始化方式int arr2[] ={34,23,12,6}; //第二种初始化方式//ps:初始化数组时可以省略new运算符和数组的长度,编译器将根据初始值的数量来自动计算数组的长度,并创建数组
Example
求一维数组各元素的和
/* * 定义一个一维数组,并计算数组元素的和 */public class Number { //定义类 public static void main(String[] args) { //主方法 //定义一个数组 int sum=0; int arr[] = new int[]{1,3,5,6,2,11,33,22}; //使用foreach遍历循环 for(int x:arr){ sum+=x; } System.out.println("数组的和为:"+sum); }}
Example
获取一维数组的最小值
/* * 定义一个数组, * 求出数组中的最小值 */public class NumberMin { //定义类 public static void main(String[] args) { //主方法 //声明并赋值一个数组 int arr[] = new int[] {10,2,5,3,6,7}; System.out.println("数组中的所有元素为:"); //使用遍历输出数组中的所有元素 for(int x:arr){ System.out.print(x+"\t"); } //求出数组中的最小值 int min=arr[0]; for(int i=0;i<arr.length-1;i++){ if(min>arr[i+1]){ min=arr[i+1]; } } System.out.println(min); }}
三、多维数组
二维和多于二维的数组被统称为多维数组,其中二维数组在程序中经常会被使用,三维数组也偶尔会使用。
3.1二维数组
如果一维数组中的各个元素仍然是维数组,那么它就是一个二维数组。二维数组常用于表示表,表中的信息以行和列的形式组织,第一个下标代表元素所在的行,第二个下标代表元素所在的列。
二维数组的创建
//声明二维数组的方法有两种数组元素类型 数组名字[][]; //第一种数组元素类型[][] 数组名字; //第二种//PS:数组元素类型可以是Java中任意的数据类型,包括基本数据类型和非基本数据类型。int myarr[][]; //创建二维数组
为二维数组分配内存空间
与一维数组一样,如果二维数组在声明时没有分配内存空间,同样也要使用关键字new来分配内存,然后才可以访问每个元素。
二维数组可以看成是由多个一维数组所组成,在给二维数组分配内存时,可以为这些一维数组同时分配相同的内存。第一个中括号的数字是一维数组的个数,第二个中括号中的数字是这些一维数组的长度。
a=new int[2][4];//为二维数组的每一维分配相同的内存。
为二维数组分配内存时,可以对每一个一维数组单独分配内存,且分配的内存可以并不相同,在第一个中括号中定义一维数组的个数,然后利用一维数组分配内存的方法分配内存。
//为每一维单独分配内存a=new in[2][];a[0]=new int[2];a[1]=new int[3];
二维数组初始化
二维数组的初始化与一维数组初始化类似,同样可以使用大括号完成二维数组的初始化
数据类型 arrayname[][]={value1,value2,value3};
//第一种赋值方式int myarr[]={{12,0},{45,10}};//初始化数组后,要明确数组的下标都是从0开始的。//第二种赋值方式mayrr[0][0]=12;mayrr[0][1]=0;mayrr[1][0]=45;mayrr[1][1]=10;
Exampel
/* * 定义并使用遍历二维数组 * 对于整型二维数组,创建成功后系统会赋值给数组每个初始化值0 */public class Matrix { //创建类 public static void main(String[] args) { //主方法 int a[][]=new int[3][4]; //定义数组 System.out.println("输出3行四列的数组"); /* * 第一种遍历方式 */ for(int[] x:a){ //遍历数组 for(int z:x){ System.out.print(z); } System.out.println(); } /* * 第二种遍历方式 */ System.out.println("输出3行四列的值"); //遍历数组 for(int i=0;i<=a.length-1;i++){ for(int j=0;j<=a[i].length-1;j++){ System.out.print(a[i][j]+""); } System.out.println(); } }}
四、数组的基本操作
java.util包的Arrays类包含用来操作数组(排序和搜索)的各种方法。
4.1遍历数组
遍历数组就是获得数组中的每个元素。通常遍历数组都使用for循环来实现。
遍历一维数组:
/* * 遍历一维数组 */public class GetDay { //创建类 public static void main(String[] args) { //主方法 //定义并赋值一维数组 int day[]=new int[]{31,28,31,30,31,30,31,31,30,31,30,31}; //遍历一维数组 for(int i=0;i<day.length;i++){ System.out.println((i+1)+"天"+day[i]+"天"+"\t"); //隔三个月 回一下车 if((i+1)%3==0){ System.out.println("\n"); } } }}
遍历二维数组
/* * 遍历二维数组 */public class Tautog { //创建类 public static void main(String[] args) { //主方法 //定义二维数组并赋值 int arr[][]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; System.out.println("二维数组中的元素是"); //遍历二维数组 for(int x[]:arr){ for(int y:x){ System.out.print(y+"\t"); } System.out.println(); } }}
4.2填充替换数组元素
数组中的元素定义完成后,可通过Arrays类的静态方法fill()来对数组中的元素进行替换。该方法通过各种重载形式可完成任意类型的数组元素的替换。fill()方法有两种参数类型。
file(int[] a,int value)//该方法可以将指定的Int值分配给int数组中的每个元素a:要进行替换的数组value:要存储数组中所有元素的值。返回值:填充后的数组
Example
import java.util.Arrays;public class Swap { //定义类 public static void main(String[] args) { //主方法 //定义一维数组 int arr[]=new int[10]; //使用Arrays.fill方法用同一值进行填充 Arrays.fill(arr, 10); //循环遍历数组中的元素 for(int x:arr){ System.out.print(x+"\t"); } }}
fill(int[] a,int fromIndex,int tolndex,int value)a:要进行填充的数组fromIndex:要使用指定值填充的第一个元素的索引(包括)。toIndex:要使用指定值填充的最后一个元素的索引(不包括)。value:要存储数组所有元素的值。返回值:替换元素后的数组。
Example
在项目中创建Displace类,创建一维数组,通过fill()方法替换数组元素,最后将数组中的各个元素输出。
import java.util.Arrays;public class Displace { //创建类 public static void main(String[] args) { //主方法 //定义并初始化Int数组 int arr[]=new int[]{12,23,34,23,12,22}; //使用fill方法 把索引为1到3(不包括)的所有元素替换为8 Arrays.fill(arr,1,3,8); //循环遍历数组 for(int x:arr){ //输出所有数组元素 System.out.print(x+" "); } }}
4.3对数组进行排序
通过Arrays类的静态sort()方法可实现对数组排序,sort()方法提供了许多重载形式,可对任意类型数组进行升序排序。
Arrays.sort(object)object:指定排序的数组名称返回值:排序后的数组
Example
创建Taxis类,在主方法中创建一维数组,并将数组排序后输出
import java.util.Arrays; //导入java.util.Arrays包public class Taxis { //创建类 public static void main(String[] args) { //主方法 int arr[]=new int[]{12,32,12,43,44,23,35}; //声明数组 System.out.println("原一维数组是:"); //循环遍历数组 for(int x:arr){ //输出原来的数组 System.out.print(x+" "); } //将数组进行排序 Arrays.sort(arr); System.out.println("\n升序排列后的数组是"); //循环遍历排序后的数组 for(int x:arr){ //将排序后的数组中的各个元素输出 System.out.print(x+" "); } }} //java语言中的String类型数组的排序算法是根据字典编排顺序排序的。因此数字排在字母前面,大写字母排在小写字母前面。
4.4复制数组
Arrays类的copyOf()方法与copyOfRange()方法可实现对数组的复制。copyOf()方法是复制数组至指定长度,copyOfRange()方法则是将指定数组的指定长度复制到一个新的数组中。
copyOf()方法
该方法提供了很多种重载形式,来满足不同类型数组的复制。
copyOf(arr,int newlength)arr:要进行复制的数组newlength:int型常量,指复制后的新数组的长度。//新数组长度大于数组长度,整型数组用0填充,char类型用Null填充。小于的话,就填入到满足新数组长度。返回值:复制后的数组
Example
import java.util.Arrays;/* * 使用Arrays.copyOf()方法复制数组 */public class Cope { //创建类 public static void main(String[] args) {// //定义数组 int arr[]=new int[]{23,12,32,98,43,24,56,29}; System.out.println("原来的数组是"); //循环遍历原来数组 for(int x:arr){ //输出原来数组 System.out.print(x+" "); } //使用Arrays.Of()方法复制数组 int newarr[]=Arrays.copyOf(arr,5); System.out.println("复制的数组是"); //循环遍历复制的数组 for(int x:newarr){ //将复制的数组重新输出 System.out.print(x+" "); } }}
copyOfRange();
该方法同样提供了多种重载形式。
copyOfRange(arr,int formIndex,int toIndex)arr:要进行复制的数组对象formIndex:指定开始复制数组的索引位置。formIndex必须在0至整个数组长度之间。新数组包括索引是formIndex的元素。toIndex:要复制范围的最后邀请索引位置。可以大于数组arr的长度。新数组不包括索引是toIndex的元素。返回值:复制指定位置后的数组。
Example
使用Arrays.copyOfRange()方法复制指定数组位置长度
import java.util.Arrays;/* * 使用Arrays.copyOfRange()方法指定复制数组长度 */public class Repeat { //创建类 public static void main(String[] args) {// //定义数组 int arr[]=new int[]{212,12,2,23,433,4,86,2}; System.out.println("原来的数组是"); //循环遍历原来数组 for(int x:arr){ //输出原来数组 System.out.print(x+" "); } //使用Arrays.OfRange()方法复制数组 int newarr[]=Arrays.copyOfRange(arr,2,5); System.out.println("\n将数组下标2-5复制到新数组"); //循环遍历复制的数组 for(int x:newarr){ //将复制的数组重新输出 System.out.print(x+" "); } }}
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- Bootstrap中折叠面板panel-group手风琴效果属性详细说明
- Robot Framework之元素定位
- Linux常用高级文件操作命令
- Cocos2d-x 之显示精灵 Sprite
- 无人商店是“风口”吗?教你如何正确解读无人商店
- 数组
- 横竖屏切换
- Spark GraphX 对图进行可视化
- JVM常见垃圾回收算法
- JAVA虚拟机系列(九)
- 【bzoj2424】[HAOI2010]订货
- Git详解之二 Git基础
- Reverse engineering the ARM1, ancestor of the iPhone's processor
- photo3d人脸照片转3d模型软件开发