数组
这里写目录标题
一级目录
二级目录
三级目录
一 数组概论
数组是具有相同数据类型的一组数据的集合。在Java语言中将数组看作一个对象。根据数组的维数
可以分为一维数组、二维数组。
二 一维数组的创建和使用
一维数组实质上是一组相同类型数据的线性集合。当需要处理或传递一组数据时,可以使用数组
2.1创建一维数组
数组作为对象允许使用new关键字进行内存分配。在使用数组前,必须首先定义数组变量所属
的类型
1先声明再分配内存
声明格式:
数组元素类型 数组名字[];
或者
数组元素类型 []数组名字;
声明完数组后需要分配内存,分配内存时需要指明数组的长度。
为数组分配内存空间的语法格式如下:
数组名字=new 数组元素的类型[数组元素的个数];
示例如下:
int arr;
arr=new int[5];
2 声明的同时为数组分配内存
语法如下:
数组元素的类型 数组名=new 数组元素的类型[数组元素的个数];
示例如下:
int arr[]=new int[5];
2.2 初始化一维数组
初始化有两种形式
int arr[]=new int[]{1,2,3,4,5};
int arr2[]={2,3,5,6};
{}中的内容为数组的元素,用“,”进行分割
2.3 使用一维数组(举例说明)
package shuzu;
import java.io.*;
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=1;i<=12;i++) {
System.out.println(i+"月有"+day[i-1]+"天");
}
}
}
三 二维数组的创建和使用
二维数组可以看作元素是一个一维数组的一维数组。二维数组第一个下标代表行第二个代表元素
所在的列
3.1创建二维数组
1先声明再分配内存
声明格式:
数组元素类型 数组名字[][];
或者
数组元素类型 [][]数组名字;
声明完数组后需要分配内存,分配内存时需要指明数组的长度。
对于高维数组,有两种为数组分配内存空间的方式
1 为每一维数组分配内存
a=new int[2][4];
2分别为每一维分配空间
a=new int[2][];
a[0]=new int[2];
a[1]=new int[6]
2 声明的同时为数组分配内存
语法如下:
数据类型[][] 数组名 = new 数据类型[高维长度][低维长度];
示例如下:
int [][]a=new int[2][5];
3.2 初始化二维数组
语法如下:
数据类型 数组名称[][]={数组元素1,数组元素2...数组元素n};
示例如下:
int arr[][]={{2,3,4},{5,4,5,4,5,6}};
3.3 使用二维数组(举例说明)
package shuzu;
import java.io.*;
public class Matrix {
public static void main(String args[]) {
int a[][]=new int[3][4];
for(int i=0;i<a.length;i++) {
for(int j=0;j<a[i].length;j++)
{
System.out.print(a[i][j]);
}
System.out.println();
}
}
}
四 数组的基本操作
4.1 遍历数组
使用数组的length属性得到数组长度,使用for循环依次遍历数组元素
遍历一维数组
示例如下:
package shuzu;
import java.io.*;
public class Trap1 {
public static void main(String args[]) {
int b[][]=new int[][] {{1},{2,3},{4,5,6}};
for(int k=0;k<b.length;k++)
{
for(int j=0;j<b[k].length;j++)
{
System.out.print(b[k][j]);
}
System.out.println();
}
}
}
使用foreach遍历
package shuzu;
import java.io.*;
public class Tautog {
public static void main(String args[]) {
int arr2[][]= {{4,3},{1,2}};
System.out.println("数组中的元素是:");
int i=0;
for(int x[]:arr2) {
i++;
int j=0;
for(int e:x) {
j++;
if(i==arr2.length&&j==x.length) {
System.out.print(e);
}else
System.out.print(e+"、");
}
}
}
}
4.2填充替换数组元素
通过Arrays类的静态方法fill()来对数组中的元素进行替换
1 对指定数组全部替换
fill(数据类型[] 数组名称,替换的值)
int arr=new int[5];
Arrays.fill(arr,8);//这时arr数组中的元素全部变成了8
2 对数组指定位置进行替换
语法如下:
fill(数据类型[] 数组名称,替换初始位置,替换的末位置(不包括在内),替换的值);
如果替换的初始位置和末位置相同,则不进行替换
int arr[]=new int[]{45,1,2,10};
Arrays.fill(arr,1,2,8)//这时下标为一的元素的值被更换成8
4.3 对数组进行排序
通过Arrays类的静态sort()方法实现对数组的排序
语法如下:
Arrays.sort(数组名称);
示例如下:
int arr[]=new int[]{23,42,12,8};
Arrays.sort(arr);//对arr数组进行排序
注意排序是根据字典编排顺序进行排序的。因此数字在字母前,大写字母在小写字母前
4.4 复制数组
Arrays类的copyOf()方法与copyOfRange()方法可以实现对数组的复制
(1)copyOf()方法
复制数组到指定长度
语法如下:
Arrays.copyOf(数组名,新数组长度);//如果新数组长度大于被复制的数组的长度,
//如果是整型数组则填0,字符数组填null
int arr[]=new int[]{23,43,12};
int newarr[]=Arrays.copyOf(arr,5);//新数组长度为5,元素分别是23,43,12,0,0
(2)copyOfRange()方法
可将指定数组的指定长度复制到一个新数组
语法如下:
Arrays.copyOfRange(数组名称,开始复制的索引位置,结束复制的索引位置(最后索引位置不被复制))
示例如下:
int arr[]=new int[]{23,42,12,84,10};
int newarr[]=Arrays.copyOfRange(arr,0,3);//新数组长度为3,元素分别为23,42,12
4.5 数组查询
Arrays类的binarySearch()方法,使用二分搜索法来搜索指定数组,以获得指定对象,
返回索引值,其有两种参数类型
(1)binarySearch(Object a[],Object key)
语法如下:
binarySearch(Object[] a,Object key)
a:要搜索的数组
key:要搜索的值
当key在该数组中时,返回该搜索值的索引;否则返回-1或者“-”+插入点。插入点是第一个大于此键的元素索引
注意必须在调用之前对数组进行排序,否则查询的结果是没有意义的,如果有多个键值,则无法
示例如下:
int ia[]=new int[]{3,1,4,5,2,6};
Arrays.sort.(ia);
int index=Arrays.binarySearch(ia,4);//这时index的值是3
int index2=Arrays.binarySearch(ia,4.5);/**这时Index的值是-4,第一个大于4.5的值是5,它的索引是4,所以返回值是-4/
(2)binarySearch(Object [],int fromIndex,int toIndex,Obejct key)
语法如下:
binarySearch(Object a[],int fromIndex,int toIndex,Obejct key);
a:要搜索的数组
fromIndex:指定范围的开始从索引(包含)
toIndex:指定范围的结束处索引(不包含)
key:要搜索的元素
注意:使用该方法之前需要对该数组进行排序,来获得准确的索引值,如果元素key在指定的范围内,则返回该键值的索引值,否则返回-1或者“-”+插入点。如果key大于范围内的所有值则返回toIndex;如果指定的范围大于等于数组的长度,会报错。
示例如下:
package shuzu;
import java.io.*;
import java.util.Arrays;
import java.util.Arrays.*;
public class Rakel {
public static void main(String args[]) {
String str[]=new String[] {"ab","cd","ef","yz"};
Arrays.sort(str);
int index=Arrays.binarySearch(str, 0,2,"cd");
System.out.println("cd的索引位置是:"+index);
}
}