2018-02-28数组:相同数据类型的数据的组合。
如:int score1=1;
int score2=2;
int score3=3;
使用数组:
1.数组的初始化
int[] score1=new int[]{1,2,3};//静态初始化:在声明并初始化数组与给数组相应的元素赋值操作同时进行。
int[] score2=new int[3];//动态初始化:在声明初始化数组与给数组相应元的素赋值操作分开进行。
score2[0]=1;
score2[1]=2;
score2[2]=3;
//声明数组的错误写法:
- String[] names=new String[5]{"AA","BB","CC"};
- int i[10];
- int i=new int[];
//不论动态初始化,还是静态初始化,一定要在创建时,就指明数组的长度。
2.如何应用数组元素:通过数组的下角标的方式。下角标从0开始,到n-1结束。其中n为数组的长度。
3.数组的长度:通过数组的属性length来调用。
System.out.println(score2.length);//3
4.如何遍历数组
for循环
for(int i=0;i<score1.length;i++){
System.out.println(score1[i]);
}
5.数组的默认初始化值:
1)byte int short long 0
2)float double 0.0
3) char 空格
4)boolean false
5)引用类型变量 null
6.数组的内存结构
内存的基本结构:栈空间,堆空间,方法区,静态域
数组的内存结构:以一位数组来说:①相应的引用放在栈空间②数组的实体存放在堆空间
数组的作用域:引用计数算法:若堆空间的值在栈空间没有引用,那么jvm将对其进行内存回收。
二维数组
1.声明并初始化
//一维
int[] =new int[12];
int[0]=12;
int[] j=new int []{12.3};
//二维
1)String[][] str=new String[4][3];//4行3列 长度为4 动态初始化
2)String[][] str1=new String[4][];
str1[0]=new String[3];
str1[1]=new String[4];
...
3)静态初始化
int[][] arr=new int[][]{1,2,3}{4,5}{6};
2.如何引用二维数组
arr[1][0]=12;
3.二维数组的长度:arr.length;//3
arr[1].length;
4.遍历二维数组
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length;j++){
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
5.二维数组的结构
0000 00000000
0000 000000
0000 0000
6.数组的常见异常
1)数组下标越界
2)空指针异常
7.数组的常用算法
1.求数组的最大值、最小值、和、平均数、中位数。
2.数组的复制和逆转。//值传递
1)复制
情况一:让两个数组的指针相等
情况二:重新new一个数组,然后将元素依次赋值。
2)数组的反转
for(int i=0;i<arr.length/2;i++){
int temp=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}
for(int x=0,y=arr.length-1;x<y;x++,y--){
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
拓展:反转字符串 String str="abcdefg";
思路:将其放进数组然后套用上面的算法
数组的排序:
插入排序
直接插入排序、折半插入排序、Shell排序
交换排序
冒泡排序、快速排序(分区交换排序)
选择排序
简单选择排序、堆排序
归并排序
基数排序
//实际开发中,调用Arrays工具类Arrays.sort(arr);//默认从大到小