一维数组的概念及表示
对比于集合来学习;用于存储相同数据类型的集合;这些元素都被当做对象被创建。一个班级要存储学生的成绩,每个学生都需要存储到数组中
数组:相同类型元素的集合(前俩是静态,后一个是动态)
-
int[] 变量名={元素,元素,元素..}
-
int 变量名[]={元素,元素,元素..}
-
int [] 变量名 =new int[size] //注意,此时是中括号内表示大小
- 给数组赋值直接 ;int a[]=new int[]{元素,元素,元素,元素,。。}
输出
数组是一种引用类型;单独输出会输出引用地址。
1.用增强for循环依次输出才会输出值
int a []={1,2,3,4,8,6,7}
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
2.用一个变量存储数组,通过输出变量名输出
int a [] = {2,3,5,6,3,9};
for(int a_:a) {
System.out.println(a_+" ");
}
3.用 Arrays包里的toString()方法
import java.util.Arrays;
int a[]={1,2,3,4,5,6,8,8};
System.out.println(Arrays.toString(a));//将引用地址该为字符串输出的形式
数组的特点
- 必须存储相同类型的值
- 数组的长度一旦固定,不可更改
- 数组必须通过下标来获取值
- 下标从0开始到数组长度减1 for循环刚刚好 <a.length
- shuzu可以存储重复元素
数组的默认值和数据类型的定义有关
- String数组,默认值未null
- char数组 ,moren shi 空格
- int数组,默认是 0
float [ ] a= {12.1f,13.6f};//float类型的数组赋值要+ f
二维数组的表示及输出
1.int a [][]={{1,2,3},{,4,5,6},{7,8},{…}…}
2.表示: 嵌套for循环来输出数组,借助变量a_和b来便利
3.多维数组在内存中的存放位置是 3排,每排还是数组
4.可以将其中的一排赋值给新数组,他的长度于元素个数有关。
5.二维数组的每个元素的长度并不要求相同
package 数组2;
public class home3 {
public static void main(String[] args) {
int a [][]= {{1},{2,3},{4,5,6}};
for(int[] a_:a) {//嵌套for循环来输出数组,借助变量a_和b来便利
for(int b:a_) {
System.out.println(b+" ");
}
}
}
}
普通for循环输出
package 多维数组;
//多为数组的遍历
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] [] scores= {
{82,90,91},
{68,72,64},
{95,91,89},
{67,52,60},
{79,81,85},
};
double average=0;
double sum=0;
for(int i=0;i<scores.length;i++) {
for(int j=0;j<scores[i].length;j++) {
sum+=scores[i][j];
}
}
average =sum/15;
System.out.println(average);
}
}
二维数组的排序
package 多维数组;
import java.util.Arrays;
public class Test4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] []a={{11,15,32,21},{2,3},{4,5,6}};
int count=0;
for(int i=0;i<a.length;i++) {
for(int j=0;j<a[i].length;j++) {
count++;
}
}
int [] b=new int[count];
int index=0;
for(int i=0;i<a.length;i++) {
for(int j=0;j<a[i].length;j++) {
b[index++]=a[i][j];
}
}
Arrays.sort(b);
System.out.println(Arrays.toString(b));
}
}
数组的扩容
1.定义更大的数组
2.把原来的内容赋值到新数组
3.原来的数组名指向新数组
package 数组.扩容;
-
public class Default {
public static void main(String[] args) {
// TODO Auto-generated method stub
int []data= {23,54,67,78,34,89};
//定义更大的数组
int [] newData=new int[data.length*2];
//把原来的内容赋值到新数组;多余的空位用0补齐
for(int i=0;i<data.length;i++) {
newData[i]=data[i];
}
//让原来的数组名指向新的数组
data= newData;
}
}
- 数组一般只用于查找,很少用于删除插入
数组的删除
package 数组.删除;
import java.util.Arrays;
//定义一个方法,删除指定元素
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=delete(data[]={4,5,8,2,96,5,5,7},5);
System.out.println(Arrays.toString(data));
}
public int delete(int data [],int i){
//1.定义较小的数组
int [] newDate=new int [data.length-1];
//2.把0,1复制到新的数组中,在i+1开始到 data.length
for(int t=0;t<i ;t++) {
newDate[t]=data[t];
}
for(int t=i+1;t<data.length;t++) {
newDate[t-1]=data[t];
}
//4.返回新的数组
return newData;
}
}
命令行参数
命令行参数是String[ ]数组类型
命令行由JVM接受用户传给main方法
如何解析命令行参数需要由程序自己实现