数组
基本认识:容器,可以存储一组数据(多个),java中的数组
数组的基本概念及作用
特殊数组类型(数据结构)
创建数组时,需要给定数据类型,只能储存同一类的数据
数组是引用类型,对象(下章)--->可以存储多个值的容器
声明 创建
声明一个数组,创建一个数组
创建之初需要给定数组的容量;
声明两种写法:int[ ] a= new int[ 5];建议使用这种
int b[ ]= new int[10 ];
System.out.println(a);输出给我们一个地址
System.out.println(Arrays.toString(a));把数组以字符串的形式输出,便于调试
创建数组时,为数组赋值,容量就由值得个数决定
int[] a = new int[5]; System.out.println(Arrays.toString(a)); int[] b = new int[10]; System.out.println(Arrays.toString(b)); int[] c = new int[]{1, 2, 3, 4, 5, 6, 7}; System.out.println(Arrays.toString(c)); char [] ch= new char[5]; System.out.println(Arrays.toString(ch)); float [] fl= new float[5]; System.out.println(Arrays.toString(fl)); double [] doubles= new double[5]; System.out.println(Arrays.toString(doubles)); String [] strings= new String[5]; System.out.println(Arrays.toString(strings)); boolean [] booleans= new boolean[5]; System.out.println(Arrays.toString(booleans));
当我们没有给数组赋值时,数组就会给我们一个默认值
[0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [1, 2, 3, 4, 5, 6, 7] [ , , , , ] [0.0, 0.0, 0.0, 0.0, 0.0] [0.0, 0.0, 0.0, 0.0, 0.0] [null, null, null, null, null] [false, false, false, false, false]
数组元素访问
数组里面可以存储多个值,如何访问(赋值,获取)数组中的每一个值
数组中每一个空间,都有一个下标(索引 index 编号)
特点:整数 开始0[1,2,3,4,5] 最大索引(长度-1)
0 1 2 3 4
数组名加数组索引就可以获取到该位置的值
数组长度是有限制的 最大也就是int的最大值
数组内部空间必须是连续的
数组遍历 :取出数组中的每一个值
int [] a= new int[]{2,4,6,8,10}; for (int i=0;i<a.length;i++){ System.out.println(a[i]); }
增强for(类型 变量:数组){}
隐藏遍历细节,每次从数组中取出一个元素
for(int t : a){ System.out.println(t); }
小练习:查询数组中的最大值(小白的我刚拿到还是很懵的,因为最大的问题是无从下手,没有思路,还是要多练啊!!!!!!)
int [] a= new int[]{2,4,6,8,10};//随意定义个数组 int max =a[0];//假设最大值在第一位 for (int m=0;m<a.length-1;m++){ if (a[m+1]>a[m] ){//判断第一位和下一位的大小 max=a[m+1];//下一位大就把下一位赋给最大值,否则执行else } else {//下一位小就把下一位替换成max继续作比较 a[m+1]=a[m]; max=a[m]; } }System.out.println(max);//最后输出就行了
排序
冒泡排序:
外层循环是需要跑的趟数,
内层循环是每趟比较的次数,拿出一个数之后与下一个数进行比较,如果大于就将两个数交换位置.
nt [] a = new int []{10,8,6,4,2}; for (int i =0;i<a.length-1;i++){//趟数 for (int j=0;j<a.length-1-i;j++){//每趟的次数 if (a[j]>a[j+1]){//比较,左大于右升序 int temp=a[j];//存储 a[j]=a[j+1]; a[j+1]=temp; } } }System.out.println(Arrays.toString(a));
选择排序:
未优化时: 从第一个元素开始,与后面的每一个元素进行比较,把较小的元素与当前元素进行交换
int[] a=new int[]{1,5,4,3,2}; for (int k=0;k<a.length-1;k++){ for(int y=k+1;y<a.length;y++){ if (a[k]>a[y]){ int temp=a[k]; a[k]=a[y]; a[y]=temp; } } }System.out.println(Arrays.toString(a));
优化后:假设第一个是最小的,与后面每一个进行比较,把较小的元素进行记录,最后进行交换
int[] a=new int[]{1,5,4,3,2}; for (int k=0;k<a.length-1;k++){ int minIndex=k;//假设第一个是最小的 for(int y=k+1;y<a.length;y++){ if (a[minIndex]>a[y]){//最小的与下一位比较 minIndex=y;//小于第一个就记录下来 } } int temp = a[minIndex];//在与所有比较完后进行交换 a[minIndex]=a[k]; a[k]=temp; }System.out.println(Arrays.toString(a));
二维数组
数组中的元素又是一个数组
int[][] a=new int[3][2]; //[3][2]二维数组的长度是3,二维数组中的每一个一维数组的长度是2 //int b[][];(不建议使用)
二维数组遍历
int[][] a=new int[3][2]; 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();//换行 }