数组

来源:互联网 发布:开源电商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+" ");        }    }}

原创粉丝点击