一个星期快速自学java编程高级语言干货笔记 - 数组

数组

数据存储:
为了能够在内存中临时存储运行数据,学习了变量(可变的量,是程序在运行中单一数据的存储方式)。
为了能更复杂的存储数据,我们需要学习数组!

1. 理解数组的作用

**数组(数据的组合):**它是一组相同数据类型的组合。 (缺点:只能存储相同数据类型、长度不可变)

**例如:**存储多个成绩、存储多个人的姓名

在内存中是一连串的内存空间表示,它是有序的。

2. 掌握数组的定义

变量的三要素:变量的数据类型 变量名 变量值

类比变量,数组有四要素。

  1. 数组元素的数据类型

    相同数据类型的数据。

    数值类型:byte short int long float double

    非数值类型:char boolean String

  2. 数组名(标识符)

    扫描二维码关注公众号,回复: 5667143 查看本文章

    和变量名的规范一致。

  3. 数组的元素

    数组中存储的一个个变量。

  4. 数组的下标(索引)

    数组是有序的,每一个元素都有一个固定的数组下标(序号)。 下标也是从0开始的。

    编程中的序号:大多数场景下,都是从0开始计数(前期好多人的噩梦)

3. 掌握数组的基本使用

  1. 先声明 -> 分配空间 ->赋值

    double[] scores;

    scores = new double[5];

    scores[0] = 12;

  2. 声明并分配空间 -> 赋值

    String[] names = new String[3];

    names[0] = “xxx”;

  3. (前期比较常用)声明并直接赋值

    char[] alpha = {‘a’,‘b’,‘c’}; // 它不能分成两条语句定义

    boolean[] flags = new boolean[]{true,false,false};

数组的定义注意事项

  1. 数组只能存储相同数据类型的数据。

  2. 数组的长度一经指定无法改变。

  3. 数组的元素有默认值。

    不同类型的数组元素有不同的默认值。

    byte short int long默认值:0

    float double 默认值:0.0

    boolean 默认值:false

    char 默认值:\u0000 空格

    String(引用数据类型) 默认值:null 表示空 表示没有引用地址

4. 掌握数组的常用操作

数组的遍历: 将某个内容的所有值元素全部取出来的过程。

遍历方式1: 将循环变量i作为数组的下标值,可以通过此值来获取对应的元素。

// 使用普通循环来遍历  一般使用for

for(int i = 0; i < 数组的长度; i++){

	数组名[i]

}

**遍历方式2:**增强for循环(foreach) 将数组中的每一个元素值都存储到临时变量中用来使用

for(数组元素类型  数组元素名 : 要遍历的数组名 ){

	数组元素名

}

for(double score  :  scores){

	score

}

数组(二)

1. 掌握Arrays数组工具类常用操作

java.util包。

API(Application Program Interface) 应用程序接口。

常用API

  1. 比较两个数组的元素是否完全一致: boolean equals(数组1,数组2);
  2. 将数组的所有元素转换为字符串: String toString(数组);
  3. 将数组的元素进行升序排序: void sort(数组);
  4. 将数组的元素全部填充为某个值: void fill(数组,填充的值);
  5. 将数组的元素复制到一个指定长度的新数组中: 对应的数组类型 copyOf(老数组,指定长度);
  6. 二分查找,查找指定元素在数组中的索引/下标(数组必须已经进行升序排序):int binarySearch(数组,查找的值);

(了解)List asList(T… x); 可以将指定元素 封装成 集合。

2. 掌握冒泡排序的使用(难点、重点)

掌握冒泡排序的原理

相邻元素作比较,两两比较小靠前。(升序)

代码:外层循环n-1 内层循环n-1-i

/**
 * 冒泡排序:
 * 	相邻元素作比较  两两比较小靠前
 * 	代码口诀:外层循环n-1  内层循环n-1-i   (n代表元素个数)
 */
public class Demo1 {

	public static void main(String[] args) {
		// 定义一个数列
		int[] arr = {9,5,10,3,1};
		
		for(int i = 0; i < arr.length - 1; i++) {
			for(int j = 0; j < arr.length - 1 - i; j++) {
				// 相邻元素做比较
				if(arr[j] > arr[j+1]) {
					// 数组元素移位  小靠前
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		
		System.out.println(Arrays.toString(arr));
	}

}

3.掌握二维数组

int [ ] [ ] arr = { {2,3 },{4,5}};
这个时候就代表是arr[2][ 2], 这个就代表两个空间里分别存了两个数。写法是这个样子!

package cn.kgc.demo3;
/**
 * 需求:已知3个班级的各5名同学成绩  求每个班级的总成绩
 */
public class Demo2 {

	public static void main(String[] args) {

		/*double[] score1 = {90,80,70,60,50};
		double[] score2 = {90,80,70,60,50};
		double[] score3 = {90,80,70,60,50};*/
		
		// 使用二维数组存储成绩 scores[0][0]  [0][1]  [0][2]
		double[][] scores = {{90,80,70,60,50},{10,20,30,40,50},{50,40,90,30,10}};
		// double[][] scores = new double[3][5];
		
		// 外层遍历三个班
		for(int i = 0; i < scores.length; i++) {
			// System.out.println(scores[i]);
			// 表示每个班的综合
			double sum = 0;
			// 内层遍历每个班的学生
			for(int j = 0; j < scores[i].length; j++) {
				System.out.print(scores[i][j] +" ");
				sum += scores[i][j];
			}
			System.out.println("第"+(i+1)+"班的总成绩:"+sum);
		}
		
	}

}

4. 引用数据类型初识(面向对象阶段还会做第二次深入)

关于内存分配上的一个基本区别。

Java的程序在运行的时候,数据是按照不同的场景进行不同区域的存储的。

JVM有内存划分。(《深入JVM虚拟机》- 周志明 有一定基础之后看)

根据《Java虚拟机规范》的规定,运行时数据区通常包括这几个部分:程序计数器(Program Counter
Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method
Area)、堆(Heap)。

img

Java栈(stack)一般用于存放基本数据类型值。

Java堆(heap)一般用于存放引用数据类型值。

当在Java中存储一个基本数据类型和引用数据类型(数组)时有什么区别?(第一阶段了解即可)

掌握基本的加载过程,掌握基本的引用数据类型名词来源即可。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44793608/article/details/88820941