每篇文章的浪漫主义
【100部电影混剪】“用电影拉你一把”
尽管生活像一堆破烂,但我们还是不得不去清理,因为那终究是我们自己的生活啊~
https://how2j.cn/k/array/array-create/280.html?p=311208
下面进入一问一答环节:
什么是数组
数组是一个固定长度的,包含了相同类型数据的容器。
懂了吗?
我靠,博主你别给我来一些名词解释呀,我要是看得懂还来找你!
别急,让我们一步一步往下走:
创建数组
步骤 1 : 声明数组
int[] a
; 声明了一个数组变量。[]
表示该变量是一个数组- int 表示数组里的每一个元素都是一个整数
- a 是变量名
但是,仅仅是这一句声明,不会创建数组
有时候也会写成int a[];
没有任何区别,就是你看哪种顺眼的问题
步骤 2 : 创建数组
创建数组的时候,要指明数组的长度。
new int[5]
这里我们要注意:
引用概念:
如果变量代表一个数组,比如a,我们把a叫做引用
与基本类型不同int c = 5;
这叫给c赋值为5
声明一个引用int[] a;a= new int[5];
让a这个引用,指向数组
步骤 3 : 访问数组
- 数组下标基0
- 下标0,代表数组里的第一个数
步骤 4 : 数组长度 - .length属性用于访问一个数组的长度
- 数组访问下标范围是0到长度-1
- 一旦超过这个范围,就会产生
数组下标越界异常
接下来来做一个简单的练习:
步骤 5 : 练习-数组最小值
大家想想除了这种还有其他的做法吗?
import java.util.Arrays;
public class getArrMinAndMaxNum {
public static void main(String[] args) {
int[] a = new int[5];
System.out.println("数组中的随机数是:");
for (int i = 0; i < a.length; i++) {
a[i] = (int) (Math.random() * 100);
System.out.println(a[i]);
}
//排序法
Arrays.sort(a);
int minNum = a[0];
int maxNum = a[a.length-1];
System.out.println("数组中最小的值是:" + minNum);
System.out.println("数组中最大的值是:" + maxNum);
//直接取值法
int max = Arrays.stream(a).max().getAsInt();
int min = Arrays.stream(a).min().getAsInt();
System.out.println("数组中最小的值是:" + min);
System.out.println("数组中最大的值是:" + max);
//遍历法
int min = a[0];
int max = a[0];
for (int i = 0; i < 5; i++) {
if (a[i] < min) min = a[i];
}
for (int i = 0; i < 5; i++) {
if (a[i] > max) max =a [i];
}
System.out.println("数组中最小的值是:"+min);
System.out.println("数组中最大的值是:"+max);
}
}
初始化数组
步骤 1 : 分配空间与赋值分步进行
分配空间与赋值分步进行
步骤 2 : 分配空间,同时赋值
分配空间,同时赋值
接下来来做一个简单的练习:
步骤 3 : 练习-数组反转
- 首先创建一个长度是5的数组,并填充随机数。
- 使用for循环或者while循环,对这个数组实现反转效果
关于数组的排序
步骤 1 : 选择法排序
选择法排序的思路:
- 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来 比较完后,第一位就是最小的
- 然后再从第二位和剩余的其他所有进行比较,只要比第二位小,就换到第二个位置来 比较完后,第二位就是第二小的
以此类推
public class HelloWorld {
public static void main(String[] args) {
int a [] = new int[]{18,62,68,82,65,9};
//排序前,先把内容打印出来
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println(" ");
//选择法排序
//可以发现一个规律
//移动的位置是从0 逐渐增加的
//所以可以在外面套一层循环
for (int j = 0; j < a.length-1; j++) {
for (int i = j+1; i < a.length; i++) {
if(a[i]<a[j]){
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
//把内容打印出来
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println(" ");
}
}
步骤 2 : 冒泡法排序
冒泡法排序的思路:
- 第一步:从第一位开始,把相邻两位进行比较 如果发现前面的比后面的大,就把大的数据交换在后面,循环比较完毕后,最后一位就是最大的
- 第二步: 再来一次,只不过不用比较最后一位
以此类推
public class HelloWorld {
public static void main(String[] args) {
int a [] = new int[]{18,62,68,82,65,9};
//排序前,先把内容打印出来
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println(" ");
//冒泡法排序
//可以发现一个规律
//后边界在收缩
//所以可以在外面套一层循环
for (int j = 0; j < a.length; j++) {
for (int i = 0; i < a.length-j-1; i++) {
if(a[i]>a[i+1]){
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}
//把内容打印出来
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println(" ");
}
}
接下来来做一个简单的练习:
步骤 3 : 练习-排序
public class sort3 {
public static void main(String[] args) {
int a[] = new int[5];
a[0] = (int)(Math.random()*100);
a[1] = (int)(Math.random()*100);
a[2] = (int)(Math.random()*100);
a[3] = (int)(Math.random()*100);
a[4] = (int)(Math.random()*100);
System.out.println("生成的随机数为:");
for (int i = 0; i <a.length ; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
//使用选择法正排序
for (int j = 0; j <a.length-1 ; j++) {
for (int i = j+1; i < a.length; i++) {
if (a[i]<a[j]){
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
System.out.println("正序排序:");
for (int i = 0; i <a.length ; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
//使用冒泡法倒排序
for (int j = 0; j < a.length; j++) {
for (int i = 0; i <a.length-j-1 ; i++) {
if (a[i]<a[i+1]){
int temp = a[i+1];
a[i+1] = a[i];
a[i] = temp;
}
}
}
System.out.println("倒叙排序:");
for (int i = 0; i <a.length ; i++) {
System.out.print(a[i]+" ");
}
System.out.println("");
}
}
增强型for循环
增强型for循环在遍历一个数组的时候会更加快捷
步骤 1 : 增强型for循环
用增强型for循环找出最大的那个数
复制数组
数组的长度是不可变的,一旦分配好空间,是多长,就多长,不能增加也不能减少
步骤 1 : 复制数组
把一个数组的值,复制到另一个数组中
System.arraycopy(src, srcPos, dest, destPos, length)
- src: 源数组
- srcPos: 从源数组复制数据的起始位置
- dest: 目标数组
- destPos: 复制到目标数组的起始位置
- length: 复制的长度
话说,这种方法在我学习过程中我也是第一次见到,还有这种方法吗,我也觉得好奇妙哦。
步骤 2 : 练习-合并数组
二维数组
什么是二维数组?
这是一个一维数组, 里面的每一个元素,都是一个基本类型int
int a[] =new int[]{1,2,3,4,5};
这是一个二维数组,里面的每一个元素,都是一个一维数组
所以二维数组又叫数组的数组
int b[][] = new int[][]{
{1,2,3},
{4,5,6},
{7,8,9}
};
步骤 1 : 初始化二维数组
步骤 2 : 练习-二维数组
数组 arrays
Arrays是针对数组的工具类,可以进行 排序,查找,复制填充
等功能。 大大提高了开发人员的工作效率。
步骤 1 : 数组复制
与使用System.arraycopy
进行数组复制类似的, Arrays提供了一个copyOfRange
方法进行数组复制。
不同的是System.arraycopy,需要事先准备好目标数组,并分配长度。 copyOfRange
只需要源数组就就可以了,通过返回值,就能够得到目标数组了。
除此之外,需要注意的是 copyOfRange
的第3个参数,表示源数组的结束位置,是取不到的。
步骤 2 : 转换为字符串
- 如果要打印一个数组的内容,就需要通过for循环来挨个遍历,逐一打印
- 但是Arrays提供了一个toString()方法,直接把一个数组,转换为字符串,这样方便观察数组的内容
排序
Arrays工具类提供了一个sort方法,只需要一行代码即可完成排序功能。
步骤 4 : 搜索
查询元素出现的位置
需要注意的是,使用binarySearch进行查找之前,必须使用sort进行排序 如果数组中有多个相同的元素,查找结果是不确定的
步骤 5 : 判断是否相同
比较两个数组的内容是否一样
第二个数组的最后一个元素是8,和第一个数组不一样,所以比较结果是false
步骤 6 : 填充
使用同一个值,填充整个数组
步骤 7 : 练习-二维数组排序
提示:对于这篇学习笔记就暂时到这了,兄弟们加油
对于这篇学习笔记就暂时到这了,兄弟们加油
从现在做起,坚持下去,一天进步一小点,不久的将来,你会感谢曾经努力的你! |
如果又出错的,请各位友友指正。
新人报到,各位友友们,给我个三联(点赞,关注,收藏)