Java基础--数组

数组是具有相同数据类型的一组数据的集合,在Java中,虽然基本数据类型不是对象,但是由基本数据类型组成的数组却可以看成对象。数组作为对象允许使用new关键字进行内存分配,在使用数组前,必须首先定义数组的数据类型。

 

  • 数组的创建

 

数组分一维数组和二维数组;

 

一维数组

一维数组的创建有两种形式:第一种,先声明数组,再用new来进行内存分配;第二种,声明数组与内存分配同时进行。

 

先声明数组,再用new来进行内存分配

首先声明一维数组同样有两种方式:

数组元素类型 数组名称 [];

数组元素类型 [] 数组名称;

 

数组声明后还不可以使用,要在为数组分配内存,要注意,在为数组分配内存空间时要指明数组的长度。

数组名称 = new 数组的元素类型[数组元素的个数];

注意:在为数组分配内存时,整数型数组的各个元素的初始值为0.

 

声明数组的同时为数组分配内存空间

数组元素类型 数组名称 = new 数组元素类型[数组元素的个数];

 

数组与基本数据类型一样可以进行初始化操作,可以分别初始化数组中的每个元素。

数组初始化的方式也有两种:

例如:int arr[] = new int[]{1,2,3,4,5};

      Int arr[] = {3,5,7};

 

二维数组

二维数组就是数组中的每一个元素同样也是一个数组。二维数组通常用于表示表,表中信息以行列的形式组织,第一个下标代表元素所在的行,第二个下标代表元素所在的列。

 

创建二维数组的方式同样有两种:先声明数组再分配内存和声明的同时进行内存分配;

声明二维数组

数组元素类型 数组名称 [] [];

数组元素类型 [] [] 数组名称;

 

为数组分配内存

arr = new int[2][4];

 

声明数组的同时为其分配内存:

数组元素类型 [][] 数组名称 = new 数组元素类型[2][4];

 

二维数组的初始化

例如: int arr[][] = {{1,2},{3,4}}

 

 

二.数组的操作

数组可以通过Java.util 包中的Arrays类包含的方法来对数组进行操作。

 

  1. 遍历数组

遍历数组,获取数组中的元素,通常采用for循环和foreach语句的方式,二维数组则需要双重for循环;

例如:// 首先定义一个二维数组

int arr [][] = new int[][] {{1},{2,3},{4,5,6}};

 

// 采用双重for循环的方式遍历数组

for(int i=0;i<arr.length;i++) {

int[] arr1 = arr[i];

for(int j=0;j<arr1.length;j++) {

System.out.print(arr1[j]);

}

System.out.println();  // 换行

}

 

// 采用foreach语句遍历

// 定义一个外层循环计数变量

int a = 0;

for (int[] arr2 : arr) {

a++;

// 定义一个内层循环计数变量

int b=0;

for (int ar : arr2) {

b++;

//判断是否是数组中最后一个元素

if(a == arr.length && b == arr2.length) {

System.out.println(ar);

}else {

System.out.println(ar+",");

}

}

}

 

 

  1. 填充替换数组元素

数组元素定义后,可通过Arrays中方法fill(),对数组元素进行替换。

fill(int[] a,int value) 将指定的int值value分配给int型数组每个元素。

 

fill(int[] a, int fromIndex, int toIndex, int value) 该方法将指定的int值value分配给int型数组指定范围中的每个元素,填充的范围从索引fromIndex(包括该索引)一直到 toIndex(不包括该索引),如果 fromIndex == toIndex ,则填充范围为空。

 

注意:如果指定的索引大于或等于要填充的数组长度,则会报数组越界异常。

 

例如:// 首先定义一个数组

int arr[] = new int[5] ;

 

//1. 使用fill(int[] a,int value) 方法

Arrays.fill(arr, 8);

// 遍历数组

for (int i : arr) {

System.out.println(i);

}

 

//2. 使用fill(int[] a, int fromIndex, int toIndex, int value) 方法

 

//重新定义一个数组,并且初始化值

int[] arr2 = new int[] {23,45,64,25};

Arrays.fill(arr2, 0, 2, 44);

// 遍历数组

for (int i : arr2) {

System.out.println(i);

}

 

 

  1. 对数组进行排序

通过Arrays中的sort()方法,可以对数组的元素进行排序,另外当数组的数据类型是String类型,他的排序算法是根据字典编排顺序排序的,因此数字应当在字母前面,大写字母要在小写字母前面。

例如://定义一个数组,并且初始化值

   int[] arr3 = new int[] {23,45,64,25};

Arrays.sort(arr3);

// 遍历数组

for (int i : arr3) {

System.out.println(i);

}

  1. 复制数组

 Arrays类中的copyOf()和copyOfRange()方法可以实现对数组的复制。copyOf()方法是复制数组至指定长度;copyOfRange()方法是将指定数组的指定长度复制到一个新的数组。

copyOf()

语法: copyOf(arr,int newIndex);

       arr 表示要进行复制的数组;

       newIndex 表示复制后新数组的长度,如果新数组的长度大于数组arr的长度,则用0填充(根据复制数组的类型来决定填充的值,整数型数组用0填充,char型数组用null填充);如果复制后的数组长度小于数组arr的长度,则会从数组arr的第一个元素开始截取到满足新数组长度为止。

 

copyOfRange()

语法:copyOfRange(arr,int fromIndex, int toIndex);

      arr 表示要复制的数组;

      fromIndex 表示指定开始复制数组的索引位置,fromIndex必须在0至整个数组长度之间,新数组包括索引是fromIndex的元素。

      toIndex 表示指定复制数组范围的最后位置,可大于数组长度,新数组不包括索引toindex的元素。

 

例如:// 首先定义一个数组

int arr [] = new int[] {2,5,4,6,27,9,12};

 

// 使用copyOf方法

int[] newArr = Arrays.copyOf(arr, 3);

System.out.println("复制后的新数组newArr中的元素是:");

for (int i : newArr) {

System.out.print(i+",");

}

System.out.println();

// 使用copyOfRange()方法

int[] newArr1 =  Arrays.copyOfRange(arr, 2, 4);

System.out.println("复制后的新数组newArr1中的元素是:");

for (int i : newArr1) {

System.out.print(i+",");

}

 

 

  1. 数组查询

Arrays类中的binarySearch()方法,可以使用二分搜索法来搜索指定数组,以获取指定对象,该方法返回的是要搜索元素的索引值。

 

binarySearch(Object[] a, Object key)

如果key值包含在数组a中,则返回搜索值的索引,否则返回-1或者“-”插入点。插入点是搜索键要插入数组的那一点,即第一个大于此键的元素索引。

如果数组中所有的元素都小于指定的键,则为数组.length.

 

注意:必须在进行此调用方法之前,对数组进行排序,如果没有对数组进行排序,则结果是不确定,如果数组中包含多个带有指定值的元素,则无法保证找到的是哪一个。

 

binarySearch(Object[] a,int fromIndex,int toIndex,Object key)该方法在指定范围内搜索指定元素。如果要搜索的key,在指定的范围内,则返回该值的索引值,否则返回-1或“-”插入点。如果范围中所有的元素都小于指定的键,则为toIndex。如果指定的范围大于或等于数组长度,则会报越界异常。

 

例如:// 首先定义一个数组

int arr [] = new int[] {2,5,4,6,27,9,12};

 

//对数组使用sort方法排序

Arrays.sort(arr);

 

// binarySearch(Object[] a, Object key)

int index = Arrays.binarySearch(arr, 8);

System.out.println(index);

int index1 = Arrays.binarySearch(arr, 5);

System.out.println(index1);

 

// binarySearch(Object[] a,int fromIndex,int toIndex,Object key)

int index2 = Arrays.binarySearch(arr, 0, 3, 43);

System.out.println(index2);

int index3 = Arrays.binarySearch(arr, 0, 3, 4);

System.out.println(index3);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值