为什么要使用数组?
数组定义是?
就是相同数据类型的元素按一定顺序排列的集合,换种说法就是把有限个类型相同的变量用一个名字命名
数组定义和创建
其中a变量代表什么,里面存储的是什么?
数组定义:int[] a;
int a[];
创建数组:a=new int[2];
int[] a=new int[19];
如何取到数组变量中的某个值?
数组名[下标] a[i]
i的取值是从0开始计算的。
数组分配好空间之后会自动进行初始化,根据数组存储的元素的类型来赋初值。
所赋初值就是各种各样的0.
byte 0 short 0 int 0 long 0 float 0.0f double 0.0 boolean false,char ‘\u0000’,
数组几个特点:
1.数组所创建的内存空间只能存储相同类型的数据
2.数组所分配内存空间是连续的
3.数组所分配的内存空间不可扩充
数组初始化数据
int[] scores=new int[3];
scores[0]=90;
scores[1]=80;
scores[2]=100;
String[] names=new String[]{"xiaoming","xiaoli","xiaozhang"};
int[] nos={100,101,102};
int[] nos=new int[]{100,101,102};
一维数组遍历
/**
* @param scores
*/
public static void Tranverse(int[] scores) {
for(int i=0;i<scores.length;i++)
{
System.out.println(scores[i]);
}
}
一维数组排序
int[] a={11,2,35,4,7,1};
Arrays.sort(a);
数组扩充:
初始化一个新数组,长度是原来的两倍。
把老数组的数据复制到新的数组中
让老数组指向新数组的地址
方式一:
//新来一个学生,存储他的成绩,数组需要扩充
// 1.首先先定义一个大数组
int[] big=new int[2*small.length];
// 2.复制小数组的内容到大数组的前small.length个位置
for(int i=0;i<small.length;i++){
big[i]=small[i];
}
// 3.修改small的地址,指向大数组
small=big;
方式二:
// 1.首先先定义一个大数组
int[] big=new int[2*small.length];
// 2.复制小数组的内容到大数组的前small.length个位置
System.arraycopy(small, 0, big, 0, 5);
// 3.修改small的地址,指向大数组
small=big;
方式三:
small=Arrays.copyOf(small, 10);
数组插入和删除元素
数组的有效长度和实际长度:有效长度是指数组中放置的元素的个数 count
实际长度是指数组本身的长度也就是定义的时候划定的长度a.length,但是里面可能有好多空间没有使用。
/**
*
* @param a 数组
* @param pos 插入的位置,下标
* @param element 插入元素的值
* @param count 目前数组的有效长度
*/
public static int[] insert(int[] a,int pos,int element,int count){
//1.插入一个元素,看数组是否需要扩充
if(count==a.length){
a=ArrayUtil.expand(a);
}
//2.先移动元素
for(int i=count;i>pos;i--){
a[i]=a[i-1];
}
//3.给第二个位置赋值100
a[pos]=element;
return a;
}
/**
*
* @param a 数组
* @param pos 下标
* @param count 有效长度
* @return
*/
public static int[] del(int[] a, int pos, int count){
for(int i=pos;i<count-1;i++){
a[i]=a[i+1];
}
return a;
}
二维数组的定义和遍历
定义:二维数组就是一个一维数组,只不过每个空间里面存放的又是一个一维数组。
二维数组 int[][] a={{1,1},{11,22}} int[][] b=new int[3][4] 其中a代表二维数组,
a[0]代表这个一维数组
遍历:
int[][] a=new int[2][3];
a[0][0]=1;
a[0][1]=2;
a[0][2]=3;
a[1][0]=4;
a[1][1]=5;
a[1][2]=6;
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();
}
/**
* 遍历二维数组
*/
public static void tranverse(int[][] arr)
{
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr[i].length;j++)
{
System.out.print(arr[i][j]+"\t");
}
}
}