Java数组

Java学习

百知教育学习 - 胡鑫喆 - Java数组

01_数组的基本概念

  • 数组
    • 基本概念:一组连续的存储空间,存储多个相同数据类型的值
    • 特点:
      • 类型相同
      • 长度固定
    • 数组中的每个数据格被称为 “数组元素”
    • 对每个元素进行赋值或取值的操作被称为 “元素的访问”
    • 访问元素时,需要使用 “下标”(从0开始,一次 +1,自动生成)
    • 访问的语法:数组名 [下标] ;//例如 存:a[0]=10,取 a[0];
    • a = new int [5] 为数组分配空间,并且
      • 数值类型 默认值为0
      • boolean类型 默认值为false
      • 对象(string)类型 默认值null
                            package day5;
                            public class TextArray {
                                public static void main(String[] args) {
                                    int [] a;//一次性定义了多个 int 类型的变量
                                    //int a[];  或  int []a;两种定义方法
                                    //定义数组后,未给出长度时,虚拟机不会给数组分配相应的存储空间
                                    a = new int[5];
                                    a[0]=2;
                                    a[1]=3;
                                    a[2]=6;
                                    a[3]=8;
                                    a[4]=9;
                                    System.out.println(a[0]);
                                    System.out.println(a[1]);
                                    System.out.println(a[2]);
                                    System.out.println(a[3]);
                                    System.out.println(a[4]);
                                   /*for(int i = 0; i< a.length; i++) {
											System.out.println(a[i]);
									}*/
                                }
                            }

在这里插入图片描述

02_ 数组的创建与初始化

  • 数组创建语法:
    • 先声明、再分配空间
      • 数据类型 [ ] 数组名;
      • 数组名 = new 数据类型 [长度];
    • 声明并分配空间
      • 数据类型 [ ] 数组名 = new 数据类型 [长度];
    • 声明并赋值(繁):
      • 数据类型 [ ] 数组名 = new 数据类型 [ ] {value1 , value2, value3,…};
package day5;
public class TextArray2 {
	public static void main(String[] args) {
		//数组的默认值为0
		int[] a = new int [] {2,1,4,5,7};//显示初始化
		//int[] a = new int[5]{2,1,4,5,7};error :数组里边的数目有大括号里的内容决定,小括号不起作用了
		//int[] a = {2,1,4,5,7};ok!
		/*
		  int []a;
		  a = new int[]{2,1,4,5,7}; ok!
		 */
		/*
		  int []a;
		  a = {2,1,4,5,7}; error!
		 */
	}
}

练习题
计算已知数组的的总分与平均分

package day5;
public class TextArray3 {
	public static void main(String[] args) {
		double[] exam = {100,80,90.5,85.5,95};
		double result = 0;
		for(int i=0; i<exam.length; i++) {
			result+=exam[i];
		}
		System.out.println(result);
		System.out.println(result/exam.length);
	}
}

在这里插入图片描述

03_可变长参数

package day5;
public class TextVarArgs {
	public static void main(String[] args) {
		System.out.println(add(1));
		System.out.println(add(1,3));
		System.out.println(add(1,3,5));
	}
	//0~n个int
	//参数表里只能有一个可变长参数(不然无法分别),而且必须是参数表中最后一个参数(也就是说:public static int add(int... a,int b)是错误的)
	public static int add(int... a) {
		//把a作为整形数组处理
		int result = 0;
		for(int i=0; i<a.length; i++) {
			result+=a[i];
		}
		return result;
	}
}

在这里插入图片描述

04_数组的扩充

  • 在虚拟机分配空间时,数组空间是连续的,以字节存储
  • 数组下标从0开始(提高数组的查询效果)
  • 因为数组空间是连续的,所以长度是固定的,数组一旦分配好空间,长度就固定了。
    • 如何扩充数组:创建一个新数组,将原来的数组复制进去,代码如下:
package day5;
public class TextArrayExpand {
	public static void main(String[] args) {
		int[] a = {1,2,3,4,5};
		int[] b = new int[a.length*2];
		for(int i=0; i<a.length; i++) {
			b[i]=a[i];
		}
		for(int i=0; i<b.length; i++) {
			System.out.println(b[i]);
		}
		System.out.println(a.length);
		a=b;//a中存放的数组的地址,b变量存放的也是地址(解释见05),地址指向发生变化
		System.out.println(a.length);
	}
}

在这里插入图片描述

05_数组引用的概念(好处:查询效率高 / 弱点:插入,删除数据很难)

链表与数组作用好处相反,散列表浪费空间,从而使查询,插入,删除效率都很高

  • java 数据类型(区别:)
    • 简单数据类型:8种 int float double char byte long short bool(把数据存入到变量里)
    • 对象数据类型:不是以上8种的类型为对象数据类型 (把数据的首地址存入变量里) 整形数组不是整形,所以为对象数据类型
package day5;
public class TextReference {
	public static void main(String[] args) {
		int[] a = {1,2,3,4,5};
		int[] b = a;
		b[0] = 10;
		System.out.println(a[0]);
		int c=1;
		int d=c;
		d=10;
		System.out.println(c);
	}
}

在这里插入图片描述

package day5;
public class TextReference {
	public static void main(String[] args) {
		/*
		int[] a = {1,2,3,4,5};
		int[] b = a;
		b[0] = 10;
		System.out.println(a[0]);
		int c=1;
		int d=c;
		d=10;
		System.out.println(c);
		*/
		int[] a= {1,2,3,4,5};
		change(a);//a代表数组首地址
		System.out.println(a[0]);
		int c=1;
		change(c);
		System.out.println(c);
	}
	static void change(int[] a) {
		a[0] = 10;
	}
	static void change(int c) {
		c=10;
	}
}

在这里插入图片描述

06_二维数组(java中没二维数组,只是在一维数组基础上建成的)

  • 概念:一维数组中的一堆数组,数组中的元素还是数组
  • java中只维护了一维数组连续的特点
package day5;
public class TextMultiArray {
	public static void main(String[] args) {
		int[][] a;
		//a = new int[4][7];//前边为高维下标,后边为低维下标
		a = new int[][] {{100,90,80},{100,20,50},{80,60,90},{40,60,50}};
		for(int i=0; i<a.length; i++) {
			for(int j=0; j<a[i].length; j++) {
				System.out.print(a[i][j]+"\t");
			}
			System.out.println();
		}
        /*int[][] a = new int[3][];
		a[0] = new int[5];
		a[1] = new int[4];
		a[2] = new int[6]; 正确,可以做一个不规则的二维数组
        int [] [] a = new int [] [8];error 无法分配空间*/
	}//a[i]里边的元素内存地址一定连续,但a[0],a[1],a[2]之间不一定连续
}

在这里插入图片描述

07_案例 杨辉三角形

package day5;
import java.util.*;
public class Exc4_1 {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int n = s.nextInt();
		
		int[][] a = new int[n][];
		for(int i=0; i<n;i++) {
			a[i]=new int[i+2];
			a[i][0]=1;
			a[i][i+1]=1;
			for(int j=i; j<n; j++) {
				System.out.print(" ");
			}
			for(int j=1; j<=i; j++) {
				a[i][j] = a[i-1][j-1]+a[i-1][j];
			}
			for(int j=0; j<i+2; j++) {
				System.out.print(a[i][j]+" ");
			}
			System.out.println();
		}
	}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值