数组知识点整合

发布时间:2023-05-04 10:16:34

  1.数组概念:

  它是指可以同时存储相同数据类型的多个值的容器。

  但在存储数据时,数组容器需要结合隐式转换来考虑。

  比如:

  定义了int类型的数组。所以boolean。double类型的数据不能存储在这个数组中,

  但是byte类型、short类型、int类型的数据可以存储在这个数组中。

  建议:

  与存储的数据类型一致的容器类型。

  举例:

  整数1 2 3 4 56 int类型的数组可以用来存储。

  小数1.1 1.2 1.3 1.4 double类型的数组可以用来存储。

  字符串"aaa" "bbb" "ccc" String类型的数组可以用来存储。2.数组的定义格式1:

  数据类型 [] 数组名

  比如:int [] array格式二:

  数据类型 数组名 []

  比如: int array []详解:

  数据类型:限制了数组后可以存储的数据类型。

  方括号:表示现在定义的是一个数组。

  数组名:只是一个名字,以后方便使用。注意点:

  方法括号与数组名相同,谁写在前面,谁写在后面。

  习惯性地使用第一种方法。3.数组静态初始化完整格式:

  资料类型[] 数组名 = new 资料类型[]{元素1,元素2,元素3,元素4...};

  比如:

  int[] arr = new int[11、22、33};

  double[] arr = new double[1.1、1.2、1.3];格式详解:

  数据类型:限制了数组后可以存储的数据类型。

  方括号:表示现在定义的是一个数组。

  数组名:其实只是名字,以后方便使用。命名时遵循小驼峰命名法。

  arr namesArr

  new:它为数组在内存中开辟了空间。

  数据类型:限制了数组后可以存储的数据类型。

  前面和后面的数据类型必须一致。

  int[] arr = new double[11、22、33};//错误的写作方法

  方括号:表示现在定义的是一个数组。

  大括号:表示数组中的元素。元素是存储在数组中的数据。

  一定要用逗号把多个元素分开。注意点: 等号前后的数据类型必须一致。 一旦创建了数组,长度就不能改变。 简化格式:

  资料类型[] 数组名 = {元素1,元素2,元素3,元素4...};

  比如:

  int[] array = {1,2,3,4,5};

  double[] array = 1.1、1.2、1.3};练习1:

  定义数组存储5个学生的年龄。 1.限制数组的类型是什么? int2.创建和添加元素int[]使用静态初始化 agesArr = new int[]{18,19,20,21,22};int[] agesArr = {18,19,20,21,22}; 练习2:

  定义数组存储三个学生的姓名。 1.限制数组的类型是什么? String2.创建和添加元素String[]使用静态初始化 namesArr = new String[]{"zhangsan","lisi","wangwu"};String[] namesArr = {"zhangsan","lisi","wangwu"}; 练习3:

  将4名学生的身高定义为数组。 1.限制数组的类型是什么? double2.使用静态初始化创建并添加元素double[] heightsArr = new double[1.85、1.82、1.78、1.65};double[] heightsArr = {1.85,1.82,1.78,1.65; 4.地址值 int[] arr = {1,2,3,4,5};System.out.println(arr);//[I@6d03e736double[] arr2 = {1.1,2.2,3.3};System.out.println(arr2);//[D@568db2f2

  打印数组时,实际出现的是数组的地址值。

  数组的地址值:表示数组在内存中的位置。

  以[I@6d03e736为例:

  [ :表示现在打印的是一个数组。

  I:表示现在打印的数组是int类型。

  @:只是间隔符号。

  6d03e736:是内存中数组的真实地址值。(16进制)

  然而,我们习惯性地把它放在一边[I@6d03e736整体称为数组地址值。

  对我们来说,地址值作用不大,理解简单。5.数组元素访问格式:

  数组名[索引];作用: 获取数组中对应索引上的值 一旦修改了数组中对应索引上的值,原始值就会被覆盖。 代码示例: public class Arrdemo2 { /* 数组中元素访问的格式: 数组名[索引]; 作用: 1.在指定索引上获取相应的元素 2.修改指定索引上对应的元素 */ public static void main(String[] args) { int[] arr = {1,2,3,4,5}; //需求1:在获取arr数组中,3索引上的值 int number = arr[3]; System.out.println(number); System.out.println(arr[3]); //需求2:在arr数组中,索引上的值修改为10 arr[3] = 10; System.out.println(修改后为:" + arr[3]); }} 6.索引

  又称角标、下标

  是数组容器中每个小格子对应的编号。索引的特点: 索引必须从0开始。 连续。 逐个增长+1。 7.数组的遍历

  遍历:将数组中的所有内容一一取出。

  数组长度:数组名.length;

  通用代码: for(int i = 0; i < arr.length; i++){ ///在循环过程中,i依次表示数组中的每个索引 sout(arr[i]);///可以获取数组中的每一个元素,并打印在控制台上。} 8.数组动态初始化格式:

  资料类型[] 数组名 = new 数据类型[数组长度];举例: //1.定义一个数组,保存三个人的年龄,年龄未知int[] agesArr = new int[3];//2.定义一个数组,将10名学生的考试成绩存入班级,考试成绩暂时未知,考试结束后才知道。int[] scoresArr = new int[10]; 默认数组初始化值:

  整数类型:0

  小数类型:0.0

  布尔类型:false

  字符类型:\u0000

  引用类型:null9.数组两种初始化方法的区别

  静态初始化:int[] arr = {1,2,3,4,5};

  动态初始化:int[] arr = new int[3];

  静态初始化:手动指定数组的元素,系统会根据元素的数量计算数组的长度。

  动态初始化:手动指定数组长度,系统给出默认初始化值。使用场景:

  只明确元素数量,但不明确具体数据,建议使用动态初始化。

  所有要操作的数据都已经明确,建议使用静态初始化。举例: 使用数组存储键盘输入的5个整数。int[] arr = new int[5]; 将全班学生成绩存入数组,已知学生成绩为:66、77、88、99、100int[] arr = new int[5];arr[0] = 66;arr[1] = 77;... 虽然可以实现,但是太麻烦了。建议使用静态初始化:int[] arr = {66,77,88,99,100}; 10.数组常见问题

  当访问数组中不存在的索引时,会导致索引越界异常。

  避免:

  对于任何数组,索引的范围: 最小索引:0 最大索引:数组的长度 - 1 数组名.length - 1 public class Arrdemo6 { public static void main(String[] args) { int[] arr = {1,2,3,4,5,5,5,5,5,5,5,5}; ////用索引访问数组中的元素 System.out.println(arr[1]); System.out.println(arr[10]);//ArrayIndexOutOfBoundsException }} 11.数组练习1:求和

  需求:定义一个数组,存储1、2、3、4、5

  通过遍历数组获取每个元素,请求数组中的所有数据和

  代码示例: 定义一个数组,存储1、2、3、4、5 通过遍历数组获取每个元素,请求数组中的所有数据和*///分析://1。定义一个数组,并添加数据1、2、3、4、5int[] arr = {1,2,3,4,5};///求和变量int sum = 0;//2.通历数组获取每个数据,累加求和for (int i = 0; i < arr.length; i++) { //i 数组中的每个索引依次表示 //arr[i] 依次表示数组中的每一个元素 sum = sum + arr[i];}//当循环结束时,System的值是累加后的结果.out.println(sum); 练习2:统计个数

  需求:定义一个数组,存储1、2、3、4、5、6、7、9、10

  通过遍历数组获得每个元素,统计数组中有多少个数字可以被3整除?

  代码示例: //分析://1.定义一个数组 1、2、3、4、5、6、7、8、9、10int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//定义变量,int用于统计次数 count = 0;//2.通历数组获得每个元素for (int i = 0; i < arr.length; i++) { //i 表示数组中的每个索引 //arr[i] 表示数组中的每一个元素 //3.判断当前元素是否为3倍数,如果是这样,统计变量需要自增一次。 if(arr[i] % 3 == 0){ // System.out.println(arr[i]); count++; }}//当循环结束时,意味着数组中的所有数字都被判断出来,直接打印count即可Systemem.out.println(“数组中能被3排除的数字有” + count + "个"); 练习3:变化数据

  需求:

  存储1、2、3、4、5、6、7、9、10个数组

  每一个元素都是通过遍历数组获得的。

  要求:

  1.如果是奇数,将当前数字扩展两倍

  2.如果是偶数,将当前数字转换为二分之一

  代码示例: /分析://1.定义一个数组,存储1、2、3、4、5、6、7、8、9、10int[] arr = {1,2,3,4,5,6,7,8,910};//2.通历数组获得每个元素for (int i = 0; i < arr.length; i++) { //i 数组中的每个索引依次表示 //arr[i] 依次表示数组中的每一个元素 //3.判断每个元素 if(arr[i] % 2 == 0){ //偶数 变成二分之一 arr[i] = arr[i] / 2; }else{ //奇数 扩大两倍 arr[i] = arr[i] * 2; }}//次历数组//一个循环尽量只做一件事。for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]);} 练习4:求最值

  需求:数组中的最大值

  代码示例: //定义数组寻求最大值:33、5、22、44、55//扩展问题://1。根据寻求最大值的想法,重写寻求最小智慧//2。max为什么要记录为arr[0],默认值不能为0?///不能写0//max的初始化值必须是数组中的值。//3.循环中的开始条件必须是0吗?//如果循环的开始条件是0,那么第一个循环就是和自己比较,对结果没有影响,但是效率低///为了提高效率,减少一个循环的次数,循环的开始条件可以写1。.定义数组用于存储5个值int[] arr = {33,5,22,44,55};//2.定义变量max存储最大值//临时认为0索引的数据是最大的int max = arr[0];//3.循环获取数组中的每个元素//与max进行比较 (int i = 1; i < arr.length; i++) { //i 索引 arr[i] 元素 if(arr[i] > max){ max = arr[i]; }}//4.循环结束后,Max记录了数组中最大值的Systemm.out.println(max);//55 练习5:统计个数

  需求:在1~100之间生成10个随机数存入数组。

  1)找出所有数据的和

  2)要求所有数据的平均数

  3)统计数据比平均值小多少?

  代码示例: /分析://1.定义数组int[] arr = new int[10];//2.将随机数存储在Randomm中 r = new Random();for (int i = 0; i < arr.length; i++) { //每次循环一次,会产生一个新的随机数 int number = r.nextInt(100) + 1; ///在生成的随机数量中添加数组 ///数组名[索引] = 数据; arr[i] = number;}// 1)找出所有数据的和///定义求和变量int sum = 0;for (int i = 0; i < arr.length; i++) { ///循环得到每个元素 //并将元素积累到sum中 sum = sum + arr[i];}System.out.println数组中所有数据的和为: + sum);//2)要求所有数据的平均int avg = sum / arr.length;System.out.println("数组中的平均数为:" + avg);//3)统计数据比平均值小多少? count = 0;for (int i = 0; i < arr.length; i++) { if(arr[i] < avg){ count++; }}//当循环结束时,这意味着我已经找到了所有比平均数小的数据System.out.println(”在数组中,总共有“ + count + 与平均数相比,“个数据小”);//次历数组,验证答案for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " ");} 练习6:交换数据

  要求:定义一个数组,存储在1、2、3、4、5中。按要求交换索引对应的元素。

  交换前:1、2、3、4

  交换后:5、2、3、4

  代码示例: 定义数组存储数据int[] arr = {1,2,3,4,5};//2.使用循环来交换数据for(int i = 0,j = arr.length - 1; i < j; i++,j--){ ///交换变量i和变量j指向的元素 int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;}//当循环结束时,然后数组中的数据实现了头尾交换for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " ");} 练习7:打乱数据

  要求:定义一个数组,存储1~5。要求打乱数组中所有数据的顺序。

  代码示例: //1.定义数组存储1~5int[] arr = {1, 2, 3, 4, 5};//2.循环数组,Random从0索引开始打乱数据的顺序 r = new Random();for (int i = 0; i < arr.length; i++) { ///生成随机索引 int randomIndex = r.nextInt(arr.length); ////随机索引指向的元素 跟 i 交换指向元素 int temp = arr[i]; arr[i] = arr[randomIndex]; arr[randomIndex] = temp;}//当循环结束时,然后数组中的所有数据都打乱了for顺序 (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " ");}

上一篇 基于springcloud实现的医院信息系统
下一篇 常用Collection接口下集合,Map接口下集合

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题