数组

1. 数组的概述

  1. 数组:是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
  2. 数组的常见概念:
  • 数组名
  • 下标(或索引)
  • 元素
  • 数组的长度
  1. 数组的特点:
  • 数组是有序排列的
  • 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
  • 创建数组对象会在内存中开辟一整块连续的空间
  • 数组的长度一旦确定,就不能修改
  1. 数组的分类
  • 按照维数:一维数组、二维数组…
  • 按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组

2.一维数组的使用

2.1 一维数组的声明和初始化

1.一维数组的声明和初始化
//1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行
int[] studentid;//声明
studentid = new int[]{1001,1002,1003,1004};
//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[4]; 
//也是正确的写法:
int[] arrys4 = {1,2,3,4,5};//类型推断

总结:数组一旦初始化完成了,数组的长度就确定了,而且不可修改。

2.2 如何调用数组的指定位置的元素

通过角标(索引)的方式调用
数组的角标(索引是从0开始,到数组的长度-1结束)
names[0] = "张三";
names[1] = "李四";
names[2] = "王五";
names[3] = "赵六";

2.3 如何获取数组的长度

//属性:length
System.out.println(names.length);
System.out.println(studentid.length);

2.4 如何遍历数组

for (i = 0;i < names.length; i++){
	System.out.println(names[i]);
}

2.5 数组元素的默认初始化值

默认初始化值
数组元素是整型0
数组元素是浮点型0.0
数组元素是char型ASCII码值为0的字符
数组元素是boolean型false
数组元素是引用数据类型null

2.6 数组的内存解析

栈中主要存放局部变量(方法中定义的变量,例如main方法中的变量)
堆中主要存放new出来的结构:对象、数组等
在这里插入图片描述

内存的主要结构:栈(stack),是线性结构——下图左、堆(heap)——下图右
在这里插入图片描述

练习:

class ArratTest{
	public static void main(String[] args){
		int[] arr = new int[]{8,2,0,3};
		int[] index = new int[]{2,0,3,2,4,0,1,3,2,3,3};
		String tel = "";
		for(int i = 0; i <index.length;i++){
			tel += arr[index[i]];
		}
		System.out.println("联系方式:" + tel);
	}
}

输出结果:18012820100

练习2:
在这里插入图片描述

import java.util.Scanner;
class ArraTest{
    public static void main(String[] args){
        //1.使用Scanner,读取学生人数
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入学生人数:");
        int StudentNumber = scan.nextInt();
        System.out.println("请输入" + StudentNumber + "个成绩");
        //2.创建数组,存储学生成绩,动态初始化
        int[] studentGrade = new int[StudentNumber];
        //3.给数组中的元素赋值
        for(int i = 0; i < studentGrade.length;i++){
            studentGrade[i] = scan.nextInt();
        }
        //4.获取数组元素中的最大值,获取最高分
        int maxStudentGrade = 0;
        for(int i =0;i < studentGrade.length;i++){
            if(maxStudentGrade < studentGrade[i]){
                maxStudentGrade = studentGrade[i];
            }
    }
        //5.根据每个学生成绩与最高分的差值,得到每个学生的等级和成绩
        char level;
        for(int i =0 ;i < studentGrade.length;i++){
            if(maxStudentGrade - 10 <= studentGrade[i] ){
                level = 'A';
            }else if(maxStudentGrade - 20 <= studentGrade[i] ){
                level = 'B';
            }else if(maxStudentGrade - 30 <= studentGrade[i] ){
                level = 'C';
            }else{
                level = 'D';
            }
            System.out.println("student " + i +" score is " + studentGrade[i] +" grade is " + level);
        }


    }
}

3.二维数组的使用

3.1 二维数组的声明和初始化

3.2 如何调用二维数组的指定位置的元素

3.3 如何获取二维数组的长度

3.4 如何遍历二维数组

概念:数组的元素还是数组。对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,没有多维数组。

//1. 二维数组的声明和初始化
public arrarTest2{
	public static void main(String[] args){
	//静态初始化
	int[] arr = new int[]{1,2,3};//一维数组
	int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
	//动态初始化法一
	int[][] arr2 = new int[3][2];
	//动态初始化法二
	int[][] arr3 = new int[3][];
	//正确但荒唐
	int[] arr4[] = new int[][]{{1,2,3},{4,5},{6,7,8}};
	int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};
	
	}
}

//2.如何调用数组的指定位置的元素
System.out.println(arry1[0][1]);//2
System.out.println(arry2[1][1]);//null

arr3[1] = new String[4];
System.out.println(arr3[1][0]);

//3.获取数组的长度
System.out.println(arr4.length);//3
System.out.println(arr4[0].length);//3
System.out.println(arr4[1].length);//2

//4.二维数组的遍历
        for (int i = 0;i < arr1.length;i++){
            for (int j = 0;j < arr1[i].length ;j++){
                System.out.print(arr1[i][j] + " ");
            }
            System.out.println();

3.5 二维数组元素的默认初始化值

3.6 二维数组的内存解析

//5.数组元素的默认初始化值
规定:二维数组分为外层数组的元素、内存数组的元素
	int[] arr = new int[4][3]
	外层元素:arr[0],arr[1]等
	内层元素:arr[0][0],arr[1][2]等
针对于初始化方式一:int[][] arr = new int[4][3];
	外层元素的初始化值为:地址值
	内层元素的初始化值为:与一维数组的初始化情况相同
针对于初始化方式二:int[][] arr = new int[4][];
	外层元素的初始化值为:null
	内层元素的初始化值为:不能调用,报错,空指针异常
	
public class ArrayTest3{
	public static void main(String[] args){
	int[][] arr = new int[4][3];
	System.out.println(arr[0]);//地址值
	System.out.println(arr[0][0]);//0
	System.out.println(arr);//地址值(二维数组的地址)
	
	double[][] arr1 = new double[4][3];
	System.out.println(arr[0]);//地址值
	System.out.println(arr[0][0]);//0.0
	
	String[][] arr2 = new String[4][3];
	System.out.println(arr[0]);//地址值
	System.out.println(arr[0][0]);//null
	
	String[][] arr3 = new String[4][];
	System.out.println(arr[0]);//null
	System.out.println(arr[0][0]);//报错,空指针异常
	}

}

插曲:数据结构与算法

数据结构研究的主要内容:

  • 数据与数据之间的逻辑关系:集合、一对一、一对多、多对多
  • 数据的存储结构:
    线性表:顺序表(数组)、链表、栈(先进后出)、队列(先进先出)
    树形结构:二叉树
    图形结构(多对多):

算法:

  • 排序算法
  • 搜索算法
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值