Java数组理解与应用,看完就懂。数组的定义、初始化及特点详解,一篇博文全部理解。

发布于:2022-12-19 ⋅ 阅读:(631) ⋅ 点赞:(0)

每篇文章的浪漫主义

【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 : 练习-二维数组排序
在这里插入图片描述

在这里插入图片描述
提示:对于这篇学习笔记就暂时到这了,兄弟们加油
对于这篇学习笔记就暂时到这了,兄弟们加油

从现在做起,坚持下去,一天进步一小点,不久的将来,你会感谢曾经努力的你!

如果又出错的,请各位友友指正。

请添加图片描述

新人报到,各位友友们,给我个三联(点赞,关注,收藏)

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到