首先是上篇文章说了数组常日有两种定义办法,不记得的可以去看一下上篇文章,本期我们接着再来认识一种数组常见的定义办法:
这里我们来看一下这种定义办法,之前我用的是int类型来定义的数组,这里特意换成String是为了提醒大家,数组是用来储存同一类的数据的,无论是什么类型的,只须要是一类的就行了,无论是int,double,char,还是string,Integer,抑或是后面我们要学到的hashmap,都可以用数组去储存。
strings是这个数组的变量名,new String[5],这是一种以创建工具的形式来新建一个数组的,后面学到工具的时候再穷究,中括号中的5代表了这个数组可存储的数量。数组的索引是从0开始的,那么我们存储数组的第一个元素便是strings[0],可以存储5个的话,末了一个索引该当是4,那么这里我故意给到5,然后我们遍历一下这个数组,看当作果是如何:

这里报出了索引越界的提示,那么我们再看一下如果我少给一个元素会发生什么情形呢?
这里我们可以看到,第四个元素,也便是索引为3处我们并没有给值,数组自动给其分配了null,这里实在也是可以看出来,咱们的string类型并不是根本数据类型,只有引用数据类型才会有默认值。感兴趣的小伙伴可以 自己试一下,如果是根本数据类型定义的数组短缺元素的话会发生什么情形,这里我就不演示了,后期我会在揭橥的视频里给大家演示一下,希望感兴趣的小伙伴可以关注一下。
说完了这种定义数组的办法,那么我们再来大略地聊一下,关于数组的排序问题。例如我们随机给出一个数组,里面是大小不同的随机数,如果须要将这个数组中的数按照顺序排列的话,该当如何做?
首先我们在做之前的话,该当须要捋清楚自己的思路:我们如何排列一堆无序的数字呢?当然,你别跟我说你读过书了,小学一年级数学学得很好,以是看一眼就会给数字排序,那么如果我给出10万个数字,让你排序你怎么办?而且打算机和人毕竟是不一样的,它只会按照命令去实行代码。那么在这里我们就大略说两种思路:
1.我们可以找到这个数组的最小值(或者最大值,这里以从小到大的顺序举例)放在第一位,然后再从剩下的数组里找到第二小的数放在第二位,然后再从剩下的数组里找到第三小的数放在第三位,以此类推,那么这种排序就叫做选择排序。
2.我们也可以拿相邻的两个数去比较,小的留下,大的今后挪一位,接着第一个数和第三数再比较,依旧是小的留在原地,大的今后挪一位,这样小的就会越来越往前集中,而大的就会越来越今后集中,这样就会达到从小到大的排序目的,这种排序办法就叫做冒泡排序。
以上是供应了两种思路,但是由于选择排序花费的资源非常大,一样平常是不会利用选择排序的,以是在本篇文章中我就不过多地提及了,实在还有一种更节约资源且快速的排序办法叫做插入算法,但是轻微繁芜点,我会将这三个排序算法放在视频里去说,文章很难表述清楚。
我供应一下关于冒泡排序的代码:
import java.util.Scanner;/ @author zhangjin /public class MaoPaoPaiXu { public static void main(String[] args) { int[] a = {22, 15, 88, 45, 9, 65, 33, 45, 5, 8}; //1.遍历该数组 for (int i = 0; i < a.length; i++) { System.out.println("第" + (i + 1) + "个数组元素为:" + a[i]); } //2.找出数组最大值和最小值 int max = a[0]; int min = a[0]; for (int i = 0; i < a.length; i++) { if (a[i] > max) { max = a[i]; } } for (int j = 0; j < a.length; j++) { if (a[j] < min) { min = a[j]; } } System.out.println("该in数组的最大值为:" + max); System.out.println("该数组的最小值为:" + min); //3.找出数组元素的下标值 Scanner input = new Scanner(System.in); System.out.println("请输入你想找知道哪个元素的对应下标值:"); int x = input.nextInt(); //如果所找元素不在数组内,则输出结果为-1 int index = -1; for (int i = 0; i < a.length; i++) { if (x == a[i]) { index = i; } } System.out.println("你想知道的元素的对应下标值为:" + index); //4.将数组中的两个元素的位置交流,例如将第3个元素与第7个元素交换位置 //定义一个临时变量来作为中间储存过度变量 int temp = a[2]; a[2] = a[6]; a[6] = temp; for (int i = 0; i < a.length; i++) { System.out.println("第" + (i + 1) + "个数组元素为:" + a[i]); } //5.冒泡排序,将数组元素按照从小到大的排列顺序进行排列 / 冒泡排序的思路是:以按照从小到大排序为例则:每相邻的两个数去进行比较, 将较大的数今后排,则第一次排序会将最大的数排到末了,第二次排序会将倒数第 二大的数排到倒数第二个。。。依次类推,来达到排序的目的 / for (int j=0;j<a.length;j++) { for (int i = 0; i < a.length - 1; i++) { if (a[i] > a[i + 1]) { int temp1 = a[i]; a[i] = a[i + 1]; a[i + 1] = temp1; } } } System.out.println(); System.out.println("上面是第3个元素与第7个元素交换位置后的数组遍历"); System.out.println("--------------------------------------"); System.out.println("下面是按照从小到大的顺序排列出来的数组遍历"); System.out.println(); for (int i = 0; i < a.length; i++) { System.out.println("第" + (i + 1) + "个数组元素为:" + a[i]); } }}
感兴趣的同学可以把上述代码粘贴进自己的ide工具里看当作果,看看自己是否可以看懂,后期我会在揭橥的视频里给大家详细的讲解一下。
说了那么多,你肯定想问,数组排个序有这么麻烦?实在也不是那么麻烦,数组有自己写好的工具类方法去给你排序,这里给大家演示一下:
利用Arrays.sort()方法,将须要排序的数组放入即可自动数组进行从小到大的排序,但是实在这个工具类方法也不过是有人给你写好了罢了,底层依旧是人家写好的代码给你去进行的运算,这个也便是大家后期须要去一点点深入的源码,这里也就不多赘述,同理,如果想拿到从大到小的顺序,则只须要:
实在排序并不是目的,而是想通过排序来磨炼大家的代码思维,让大家可以更深层地去思考,这样我们往后就自然会自己去撸源码,到时候才是大家程序员生涯真正开始的时候,否则都只能叫做码农。
以上便是本期数组的进阶知识,实在数组的知识也还是远不止于此,但是很多更深入的东西,我个人以为小白不可能通过看文章就能看明白的,后期我想通过视频来讲解会更好去理解,大家一起加油!
末了更文不易,希望大家可以多多点赞评论分享,当然如果可以留下一个关注自然是更好的啦~您的支持便是我更文最大的动力,我们下期再见!