数组
注意点
数组的第一个元素下标以数字0开始,如果创造了具有10个元素的数组score,那么下标范围是0~9,没有10,如果访问元素 score【10】的话,会终止程序
一维数组
数组的声明
为了将数组生命和简单变量区别开,一般将一堆方括号“[]”加到对象或者数据类型,或者变量的后面。
声明一个一维数组,一般有两种格式:
类型标识符[] 数组名
类型标识符 数组名[]
例如
int [] a;
int a[];//声明一维数组a,数组类型为整型
数组的创建
其实是为数组分配好内存,Java中采用new操作符来创建
格式: 数组名 = new 类型标识符 【整型表达式】;
其中,数组名是已经声明的数组变量名;类型标识符是数组元素的类型;整型表达式只能含有整型常量或变量,表示该数组的大小,即数组长度,也是数组元素的个数
也可以在声明数组的同时用new为其分配内存空间
格式:类型标识符 数组名【】=new 类型标识符【整型表达式】
public class 创建数组及初始化 {
public static void main(String args[])
{
float [] score;//声明数组变量
score =new float[100];//为数组score分配100个浮点型数据空间
int a[]=new [10];//为数组a分配10个整型数据空间,声明a同时为a分配内存空间
int number = 5;
char[] charArray=new char[number];//为charArray分配了5个字符型数据空间
}
}
在声明及创建一个数组的同时可以对其进行初始化,格式:
类型标识符 数组名【】={常量表达式1,常量表达式2,…}:
类型标识符【】 数组名={常量表达式1,常量表达式2,…};
例如:
int num[]={2,4,6,8};
char[] chr={'a','b'};
数组结构
arrayName[index] index为数组下标,arrayName为数组名称
length属性获取字符串的长度
public class 数组长度及越界 {
public static void main(String args[])
{
int i;
int a[] =new int [5];//声明并创建整型数组 a
//a[5]=300;//如果有这一行代码则会出现数组下标越界异常
for(i=0;i<5;i++)
a[i]=i;//为数组元素赋值
for(i=a.length-1;i>=0;i--)//通过length属性获取数组长度
System.out.println("a["+i+"]="+a[i]);//你需打印数组元素
}
}
//初始化二维整型数组吧,数组的第一维长度为3,第二维长度为3,2,4
int b[][]={{1,2,3},{4,5},{6,7,8,9}};
public class 访问多维数组 {
public static void main( String[] args)
{
int [][] arr= {{1,2,3},{4,5,6}};//表示两行三列,前面的int可以为int【2】【3】
int []foo=arr[0];
//双重循环输出二维数组中的各个元素,行优先输出元素
for(int i=0;i<arr.length;i++)//arr.length为2,,即二维数组中只有两个元素
{
for(int j=0;j<arr[i].length;j++)//arr[i].length为3,即该一维数组中有三个整型数据
{
System.out.print(arr[i][j]+" ");
}
System.out.println();//换行的作用
}
for(int i=0;i<foo.length;i++)//foo师叔祖arr第一个元素,是一维数组,长度为3
{
System.out.print(foo[i]+" ");
}
}
}
数组arr【i】【j】表示的是第i+1行和第j+1列的值,注意length所代表的长度,数组名后直接加上length(如arr.length)表示的是数组的行数;
指定索引后加上length(如arr[0].length)表示的是该行所含有的元素,即列数
数组的的相关用法
复制数组
使用系统方法arraycopy
public class 复制数组 {
public static void main(String []args)
{
//定义字符数组copyF
char [] copyF= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n'};
char [] copyT=new char[7];//声明并创建数组copyT
System.arraycopy(copyF,2,copyT,0,7);//利用系统方法arraycopy,讲copyF数组的第三个元素到第七个元素赋值到copyT数组
System.out.print("The dest array is:");
for(int i=0;i<copyT.length;i++)
{//打印复制后的数组至屏幕
System.out.print(copyT[i]+" ");
}
}
}
System.arraycopy(copyF,2,copyT,0,7); 这一语句中,
可以理解为(被复制数组名,从被复制数组哪里开始复制,复制到的数组名,a,b)
a,b为左闭右开区间,即表示复制到新的数组中的长度,这个长度也要根据给新数组的声明而定,a表示从何处开始复制更替,b表示复制的元素的个数,切记部可将ab联系起来,认为复制的元素的长度为其差,b的值和a没有关系,若新数组为未声明数组,即只能从0开始,但是若为声明了的数组且在范围内,即可以大于等于0,如果超过声明时给定的分配空间就会出错,例如上面开始声明copyT是分配的7,所以就最多复制到这个数组的元素不能超过7个!
使用该方法时,目标数组必须调用arraycopy之前分配的内存,而且这个内存空间必须足够大以容纳被复制的数据
public class 复制数组 {
public static void main(String []args)
{
//定义字符数组
char [] copyF= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n'};
//char [] copyT=new char[10];
char [] copyT= {'f','g','h','i','j','k','l','m','n','d','e','f','g','h','i'};
System.arraycopy(copyF,2,copyT,2,9);
System.out.print("The dest array is:");
for(int i=0;i<copyT.length;i++)
{
System.out.print(copyT[i]+" ");
}
}
}
此代码证明以上黄色部分
搜索数组
1顺序查找
从开都的每一个元素一次查找符合条件的数据
public class 顺序查找 {
public static void main(String args [])
{
String list[][]= {{"pen","钢笔"},{"pencil","铅笔"},{"ruler","尺子"}};
String strE="pencil";
String strC="";//开始定义并未赋值
int flag=0;
for(int i=0;i<list.length;i++)
{
if(list[i][0].compareTo(strE)==0)//如果满足条件就执行以下代码
{
strC=list[i][1];//将中文字义赋值给strC
System.out.println("查到的中文字义为:"+strC);
flag=1;
break;
}
}
if(flag==0)
{
System.out.println("未找到匹配的中文字义!");
}
}
}
对于System.out.println()语句,如果直接要输出一个数组的内容,可以直接在括号内输入数组名,例如上面的若是不加上前面的汉字部分,(因为加号起连接作用),则直接输入数组名,也不可带上加号!
2二分查找
前提:数据必须是按着某种顺序有序的数据,即从小到大或者从大到小
冒泡排序法
内层是 长度-i-1
Array类的sort方法
Arrays.sort(数组名)
基本的排序方法
public static void sort(Xxx a[])
还有一种形式是只针对其中的一部分进行排序:
public static void sort(Xxx a[],a,b)
其中的a,b是一个左闭右开的区间,只对这个区间进行排序,a数组的类型可以是char bute short int long float double boolean
import java.util.*;
public class SORT方法排序 {
public static void main(String args[])
{
int a[]= {9,8,3,5,1,6,7,0,65,9,4,6};
System.out.println("数组排序前的顺序:");
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
System.out.println("");
System.out.println("数组排序后的顺序:");
Arrays.sort(a);
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
}
}
数组的比较
格式:
Arrays.equals(数组名1,数组名2)
import java.util.*;
public class 用法equals {
public static void main(String args [])
{
int [] a1= {1,2,3,4};
int [] a2= {1,2,3,4};
System.out.println(Arrays.equals(a1,a2));//第一次将a1,a2进行比较
a2[2]=6;//对a2数组进行更改
System.out.println(Arrays.equals(a1,a2));//第二次将两数组进行比较,结果是:假
}
}