1.数组的概述和特点

1.1 数组的慨念

数组概念:数组是一种能够存放相同数据类型的有序集合。 编程的基本功:

1.2 数组的创建

1.2.1 动态数组的1创建

语法格式:



元素类型



【例题】



public



1.2 静态数组的创建

语法格式:



语法一



注意:使用静态方式创建数组,数组长度由元素个数来确定 【例题】



public



两种静态创建的区别:

1.3 数组的基本操作

数组中的元素,可以通过 索引 || 下标来访问,索引从零开始,也就是说其取值范围为:【0,数组长度-1】;如果超出索引范围,则会抛出异常:ArrayIndexOutOfBoundsException



public



输出:11 222 33 44 55

1.4 数组元素的默认值



整数



1.4.2 数组常见的属性



length属性



【示例】



int



3.通过普通for循环获取数组元素 int[] arr = {11, 22, 33, 44, 55, 66, 77}; for(int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } 技能:for+length属性 4.通过增强for-each循环获取数组元素 语法:for(数据类型 变量名 : 数组|集合) { // 循环体 } 技能:for-each 优点:语法简洁,相对执行效率较高! 缺点:遍历过程中,无法获得数组|集合索引! 使用场合:如果需要在循环体中修改数组元素的值,建议使用普通for循环。 ---> 有索引 【例题】1、 获取10个学生的成绩,然后保存在数组中,最后计算学生的总分和平均分。



public



1.5 JVM 中的堆和栈(重点)

JVM是基于堆栈的虚拟机,堆栈是一种数据结构,是用来存储数据的。对于一个Java程序来说,它的运行就是通过对堆栈的操作来完成的。 【栈内存 stack】 栈内存:用来存放局部变量 特点: 1.栈内存存储特性为:先进后出,后进先出。 2.栈内存是一段连续的内存空间,由系统自动分配,速度快! 3.虚拟机为每一个线程创建一个栈,用于存放该线程执行方法的信息。

【堆内存 heap】 堆内存:用来存储创建好的对象和数组(数组也是对象) 特点: 1.虚拟机中只有一个堆,被所有线程共享。 2.堆是一段不连续的内存空间,分配灵活,但速度慢!

【思考一】



public



【思考二】



public



2.数组常见操作

2.1 获取数组的最值

需求:求int[] arr = {134,23,35,46,57,24,13,56,23,44};这个数组最小值的元素并返回最小值和其下标



public



2.2 通过值获取索引

需求:在数组里面找value=44的值的下标,int[] arr = {2,3,16,5,6,7,23,44,24,56};



public



2.3 数组反序输出

需求:将数组反序输出, 需求:将数组反序输出,原数组{5, 12, 90, 18, 77, 76, 45, 28, 59, 72}, 反序输出后{72,59,28,45,76,77,18, 90,12,5}。



public



2.4 数组元素删除

需求:删除数组int[] arr = {22,13,35,24,15};下标为3的值



public



2.4 数组元素的插入

需求:在数组int[] arr = {11,22,33,44,55,66,88,99};中插入一个下标为6,值为77,插入到该数组中。



public



2.6 数组冒泡排序

需求:对一个没排序的数组进行从小到大的排序



public



2.7 二分查找法

二分查找法又称折半查找法。 优点:比较次数少,比起传统比较起来查找速度要更快。 缺点:要求待查表为有序列表 需求:在某一个数组里面查找你需要查找元素的(下标|索引)



public



3.Arrays 工具类

Arrays用于操作数组工具类,里面定义了常见操作数组的静态方法。 注意:要使用Arrays工具类,必须要导入Arrays工具类



import



3.1 toString方法

返回指定数组内容的字符串表示形式。 【示例】



int[] arr2 = {1,3,5,7,9};
// 调用toString 方法
System.out.println(Arrays.toString(arr2));// 输出[1, 3, 5, 7, 9]



底层源代码实现



// toString方法的底层代码实现过程



3.2 equals 判断

判断两个数组中的内容是否相同。 底层源代码实现



//equals方法的底层代码实现过程



3.4 copyOf 拷贝数组

拷贝数组中的元素,从第一个元素开始,也就是从索引0开始拷贝,拷贝元素个数为newLength个。 范围:[0, newLength) 参数一(original):被拷贝的数组。 参数二(newLength):需要拷贝元素的个数,从索引0开始拷贝 返回值:返回拷贝好的数组!



//copyOf 拷贝数组方法底层代码实现



3.5 copyOfRange 拷贝数组

拷贝数组中的元素,从指定位置开始,到指定位置结束。 范围:[from, to) 参数一(original):被拷贝的数组。 参数二(from):从哪里开始拷贝(包含) 参数三(to):拷贝到哪里结束(不包含) 返回值:返回拷贝好的数组!



// copyOfRange 拷贝数组方法底层代码实现



3.6.讲解System类中的arraycopy方法



public



  • 作用:就是用于实现数组元素的拷贝工作。
  • 建议:如果需要实现对数组元素的拷贝工作,建议使用System类中的arraycopy方法,而不要去用Arrays工具类中的copyOf()和copyOfRange()方法
  • 方法参数分析:
  • src:需要被拷贝的数组(源数组)
  • srcPos:从源数组中的那个位置开始拷贝,传递是一个索引值
  • dest:目标数组,也就是把拷贝的元素放入目标数组中
  • destPos:把拷贝的元素放在目标数组中的哪个位置,传递是一个索引值
  • length:拷贝数组的元素个数
  • 6.native关键字介绍
  • 使用关键字“native”修饰的方法,我们称之为本地方法。
  • 本地方法特点:只有方法的声明,没有方法的实现(没有方法体)。
  • 为什么会有本地方法的出现呢???
  • java虽然很强大,但是也有局限性。java不能直接操作硬件!
  • java中提供的本地方法,本质上就是通过本地方法来调用别的语言(例如:C语言)来操作硬件。

4.1方法的可变参数

可变参数:适用于参数个数不确定,但类型确定的情况,java把可变参数当做数组处理。 我们使用...表示可变长参数,...位于变量类型和变量名之间,前后有无空格都可以。 需求:求多个整数之和 前提:至少有两个及以上整数



public



4.2 main 方法的形参

参数String[ ] args的作用就是可以在main方法运行前将参数传入main方法中。



public



5. 二维数组

5.1 二维数组的定义

二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。(通俗来讲二维数组的每一个元素又是一个一维数组)

5.2 二维数组的创建

 创建格式一,创建等长的二维数组 语法语法:数据类型[][] 数组名 = new 数据类型[m][n]; m: 表示这个二维数组的长度。 n: 表示二维数组中每个元素的长度  创建格式二,创建不定长二维数组 语法格式:数据类型[][] 数组名 = new 数据类型[m][];
m: 表示这个二维数组的长度。 二维数组中元素的长度没有给出,可以动态的给。  创建格式三,创建静态二维维数组 基本格式: 【示例】 1、 有三个班级,第一个班级3个学生,第二个班级4个学生,第三个班级5个学生。要求通过键盘录入三个班级学生的成绩,并计算每个班级学生的的平均成绩和三个班级学生的总均成绩。



public