自学内容网 自学内容网

Java学习笔记(五)数组、冒泡排序

Hi i,m JinXiang


⭐ 前言 ⭐

本篇文章主要介绍Java数组、冒泡排序使用以及部分理论知识


🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁

🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言


目录

一、数组

数组介绍

数组的使用

1.1、动态初始化

数组的定义

1.2、动态初始化

1.3、静态初始化

数组使用注意事项和细节

代码示例--错误释放

数组赋值机制

数组拷贝

数组拷贝介绍

代码示例拷贝过程

结果展示

数组反转

代码示例内容反转过程

图片介绍操作

结果展示

数组扩容

扩容介绍

代码示例扩容

代码图片解释

结果展示

数组缩减

二、排序介绍

内部排序

外部排序

三、冒泡排序法

冒泡排序介绍

冒泡排序案例

冒泡排序代码诠释

四、查找

1、顺序查找

案例演示:

结果:

2、二分查找

五、二维数组

什么是二维数组?

二维数组的使用

1、动态初始化

2、动态初始化

3、动态初始化-列数不确定

4、静态初始化

二维数组的应用

杨辉三角练习

二维数组使用细节和注意事项


一、数组

数组介绍

  • 数组可以存放多个同一类型的数据。
  • 数组也是一种数据类型,是引用类型。
  • 即:数组就是一组数据
     

数组的使用

1.1、动态初始化

数组的定义

数据类型 数组名[] = new 数据类型【大小】

int a[]=new int[5];

//创建了一个数组,名字a,存放5个int
说明:这是定义数组的一种方法。


1.2、动态初始化

  • 1、先声明数组
    • 语法:数据类型数组名[];也可以数据类型[]数组名;
    • inta[];或者int[]a;
  • 2、创建数组
    • 语法:数组名=new数据类型[大小];
    • a=newint[10];

1.3、静态初始化

  • 1、初始化数组
    • 语法:数据类型  数组名[] =  (元素值 , 元素值..}
       
  • int a[]={2,5,6,7,8,89,90,34,56},如果知道数组有多少元素,具体值上面的
    • 用法相当于: int a[] =new int[9];
      • a[0]= 2;a[1]=5;a[2]=6; a[3]=7;a[4]=8; 
      • a[5]=89;a[6] =90;a[7]=34;a[8]=56;

数组使用注意事项和细节

  • 1)数组是多个相同类型数据的组合,实现对这些数据的统一管理
  • 2)数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
  • 3)数组创建后,如果没有赋值,有默认值
    • int0,short0,byte0,long0,float0.0,double0.0,char\u0000,booleanfalse,Stringnull
  • 4)使用数组的步骤1.声明数组并开辟空间2给数组各个元素赋值3使用数组
  • 5)数组的下标是从0开始的
  • 6)数组下标必须在指定范围内使用,否则报:下标越界异常,比如
    • int[]arr=newint[5];则有效下标为0-4
  • 7)数组属引用类型,数组型数据是对象(object)

代码示例--错误释放

package com.example.han_severejava.XunHuan;

public class 数组 {
    public static void main(String[] args) {
        //1.数组是多个相同类型数据的组合,实现对这些数据的统一管理
        //int[]arr1={1,2,3,60,"hello"};//String->int
        double[]arr2={1.1,2.2,3.3,60.6,100};//int->double

        //2.数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用
        String[]arr3={"北京","jack","milan"};

        //3.数组创建后,如果没有赋值,有默认值
        //int   0,short0,byte0,long0,
        //float0.0,double0.0,char\u0000,
        //booleanfalse,Stringnull
        short[]arr4=new short[3];
        System.out.println("=====数组arr4=====");
        for(int i=0;i<arr4.length;i++){
            System.out.println(arr4[i]);
        }

        //6.数组下标必须在指定范围内使用,否则报:下标越界异常,比如
        // int[]arr=newint[5];则有效下标为0-4
        //即数组的下标/索引最小0最大数组长度-1(4)
        int[]arr=new int[5];
        System.out.println(arr[5]);//数组越界
    }
}

数组赋值机制

  • 1、基本数据类型赋值,这个值就是具体的数据,而且相互不影响。
    • int n1 = 2;
    • int n2 = n1;
  • 2、数组在默认情况下是引用传递,赋的值是地址。
  • 看一个案例,并分析数组赋值的内存图(重点,难点.)
int[]arr1={1,2,3};
int[]arr2=arr1;

数组拷贝

数组拷贝介绍

int[]arr1={10,20,30}; 拷贝到 arr2 数组 , 要求数据空间是独立的

代码示例拷贝过程

package com.example.han_severejava.XunHuan;

public class 数组拷贝 {
    public static void main(String[] args) {
        //将int[]arr1={10,20,30};拷贝到arr2数组,
        //要求数据空间是独立的.
        int[]arr1={10,20,30};
        //创建一个新的数组arr2,开辟新的数据空间
        //大小arr1.length;
        int[] arr2=new int[arr1.length];
        //遍历arr1,把每个元素拷贝到arr2对应的元素位置
        for(int i=0;i<arr1.length;i++){
            arr2[i]=arr1[i];
        }
        //老师修改arr2,不会对arr1有影响.
        arr2[0]=100;
        //输出arr1
        System.out.println("====arr1的元素====");
        for(int i=0;i<arr1.length;i++) {
            System.out.println(arr1[i]);//10,20,30
        }

        //输出arr2
        System.out.println("====arr2的元素====");
        for(int i=0;i<arr2.length;i++) {
            System.out.println(arr2[i]);//
        }
    }
}

结果展示

数组反转

要求:把数组的元素内容反转。
arr{11,22,33,44,55,66}    {66,55,44,33,22,11}

代码示例内容反转过程

package com.example.han_severejava.XunHuan;

public class 数组反转 {
    public static void main(String[] args) {
        //定义数组
        int[]arr={11,22,33,44,55,66};
        //规律
        //1.把arr[0]和arr[5]进行交换{66,22,33,44,55,11}
        //2.把arr[1]和arr[4]进行交换{66,55,33,44,22,11}
        //3.把arr[2]和arr[3]进行交换{66,55,44,33,22,11}
        //4.一共要交换3次=arr.length/2
        //5.每次交换时,对应的下标是arr[i]和arr[arr.length-1-i]//代码
        //优化
        int temp=0;
        int len=arr.length;//计算数组的长度
        for(int i=0;i<len/2;i++){
            temp=arr[len-1-i];//保存
            arr[len-1-i]=arr[i];
            arr[i]=temp;
        }
        System.out.println("===翻转后数组===");
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+"\t");//66,55,44,33,22,11
        }
    }
}

图片介绍操作

另一种方法----看图诠释

结果展示

数组扩容

扩容介绍

要求:实现动态的给数组添加元素效果,实现对数组扩容
  • 1、原始数组使用静态分配int[]arr={1,2,3}
  • 2、增加的元素4,直接放在数组的最后arr={1,2,3,4}
  • 3、用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n

代码示例扩容

package com.example.han_severejava.XunHuan;

import java.util.Scanner;

public class 数组扩容 {
    public static void main(String[] args) {
        /*
        要求:实现动态的给数组添加元素效果,实现对数组扩容。ArrayAdd.java
        1.原始数组使用静态分配int[]arr={1,2,3}
        2.增加的元素4,直接放在数组的最后arr={1,2,3,4}
        3.用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n

        思路分析
        1.定义初始数组int[]arr={1,2,3}//下标0-2
        2.定义一个新的数组int[]arrNew=newint[arr.length+1];
        3.遍历arr数组,依次将arr的元素拷贝到arrNew数组
        4.将4赋给arrNew[arrNew.length-1]=4;把4赋给arrNew最后一个元素
        5.让arr指向arrNew;arr=arrNew;那么原来arr数组就被销毁
        6.创建一个Scanner可以接受用户输入
        7.因为用户什么时候退出,不确定,老师使用do-while+break来控制
        */

        Scanner myScanner=new Scanner(System.in);//初始化数组
        int[]arr={1,2,3};
        do {
            int[] arrNew = new int[arr.length + 1];
            //遍历arr数组,依次将arr的元素拷贝到arrNew数组
            for (int i = 0; i < arr.length; i++) {
                arrNew[i] = arr[i];
            }
            System.out.println("请输入你要添加的元素");
            int addNum = myScanner.nextInt();
            //把addNum赋给arrNew最后一个元素
            arrNew[arrNew.length - 1] = addNum;
            //让arr指向arrNew,
            arr = arrNew;
            //输出arr看看效果
            System.out.println("====arr扩容后元素情况====");
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + "\t");
            }
            System.out.println("是否继续添加(y/n)");
            char key = myScanner.next().charAt(0);
            if (key == 'n') {//如果输入n,就结束
                break;
            }
            //问用户是否继续
        } while (true);
    }
}

代码图片解释

结果展示

数组缩减

  • 有一个数组{12345},可以将该数组进行缩减,
  • 提示用户是否继续缩减,每次缩减最后那个元素。
  • 当只剩下最后一个元素,提示,不能再缩减。

二、排序介绍

排序是将多个数据,依指定的顺序进行排列的过程。

内部排序

指将需要处理的所有数据都加载到内部存储器中进行排序。包括 ( 交换式排序法、选择
式排序法和插入式排序法 )

外部排序

数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括 ( 合并排序法和直接合并排序法 )

三、冒泡排序法

冒泡排序介绍

冒泡排序( BubbleSorting )的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。

冒泡排序案例

冒泡排序代码诠释

四、查找

1、顺序查找

案例演示:

1)有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称【顺序查找】要求 : 如果找到了,就提示找到,并给出下标值。
package com.example.han_severejava.查找;

import java.util.List;
import java.util.Scanner;

public class 顺序查找 {
    public static void main(String[] args) {
        //1)有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:从键盘中任意输入一个名称,
        // 判断数列中是否包含此名称【顺序查找】
        // 要求:如果找到了,就提示找到,并给出下标值。
        String names[] = {"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"};
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个名称:");
        String findName = input.next();

        int index = -1;
        for (int i = 0; i < names.length; i++) {
            if (findName.equals(names[i])) {
                System.out.println("已找到"+findName+",当前下标是:"+i);
                index = i;
                break;
            }
        }
        if (index == -1){
            System.out.println("未找到"+findName);
        }
    }
}

结果:

2、二分查找


五、二维数组

什么是二维数组?

  • 1. 从定义形式,上看int[][ ]
  • 2. 可以这样理解,原来的一维数组的每个元素是一维数组,就构成二维数组
package com.example.han_severejava.二维数组;

public class 什么是二维数组 {
    public static void main(String[] args) {
        //二维数组的格式   数组类型 [][] 数组名称 = {{},{},{}}
        int [][] arr = {
            {0, 0, 0, 0, 0, 0},
            {0, 0, 1, 0, 0, 0},
            {0, 2, 0, 3, 0, 0},
            {0, 0, 0, 0, 0, 0}
        };

        //关于一维数组的关键概念
        //(1)
        System.out.println("二维数组的元素个数="+ arr.length) ;
        //(2)二维数组的每个元素是一维数组,所以如果需要得到每个一维数组的值,还需要再次逼历
        //(3) 如果我们要访问第(i+1)个一维数组的第j+1个值 arr[i][j];
        //    举例访问3, =》他是第3个一维数组的第4个值arr[2][3]
                System.out.println("第3个一维数组的第4个值="+ arr[2][3]); //3


                        //输出二维数组
        for (int i = 0; i < arr.length; i++) {//遍历二维数组的每个元素

            //arr[i] 表示 二维数组的第i+1个元素  比如arr[0]:二维数组的第一个元素
            //arr[i].length 得到对应的 每一个一维数组的长度


            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j]+" ");//输出一维数组
            }
            System.out.println();//换行
        }
    }
}

二维数组的使用

1、动态初始化

  • 1)语法:类型[] []数组名=new类型[大小][大小]
  • 2)比如: int a[]I[]=new int[2][3]
  • 3)使用演示
  • 4)二维数组在内存的存在形式 ↓

package com.example.han_severejava.二维数组;

public class 二维数组的内存布局 {
    public static void main(String[] args) {
        int arr[][] = new int[2][3]; //一个二维数组

        //给他赋值(从0开始)
        arr[1][2] = 8;//”[1]“表示在第二个数组中  “[2]”表示第三个数据

        //遍历数组
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) { //对每个一维数组遍历
                System.out.print(arr[i][j]+" ");
            }
            System.out.println(); //换行
        }
    }
}

2、动态初始化

  • 1)先声明:类型 数组名[] [];
  • 2)再定义(开辟空间) 数组名 = new 类型 [大小][大小]
  • 3)赋值(有默认值,比如int 类型的就是0)
  • 4)使用演示

3、动态初始化-列数不确定

  • 1)看一个需求:动态创建下面二维数组,并输出。
  • 如:

4、静态初始化

  • 定义类型数组名[[] = {{值1,值2..},{值1,值2..},{值1,值2..}}
  • 2.使用即可[固定方式访问]
     

二维数组的应用

杨辉三角练习

package com.example.han_severejava.二维数组;

public class 杨辉三角 {
    public static void main(String[] args) {
        int[][] yangHui = new int[10][];
        for (int i = 0; i < yangHui.length; i++) {
            //给每个一维数组(行)开空间
            yangHui[i] = new int[i + 1];
            //给每一个一维数组(行)赋值
            for (int j = 0; j < yangHui[i].length; j++) {
                //每一行的第一个元素和最后一个元素都是1
                if (j==0 || j==yangHui[i].length -1){
                    yangHui[i][j] = 1;
                }else {//中间的元素
                    yangHui[i][j] = yangHui[i - 1][j] + yangHui[i - 1][j - 1];
                }
            }
        }
        //输出杨辉三角
        for (int i = 0; i < yangHui.length; i++) {
            for (int j = 0; j < yangHui[i].length; j++) {
                System.out.print(yangHui[i][j] + " ");
            }
            System.out.println();
        }
    }
}

二维数组使用细节和注意事项
 

总结不易,希望宝宝们不要吝啬亲爱的👍哟(^U^)ノ~YO!如有问题,欢迎评论区批评指正😁


原文地址:https://blog.csdn.net/Jin_Xiang123/article/details/140044287

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!