【JAVA】第六节:Java中的数组(定义,遍历,方法,冒泡排序,有序数组二分查找)非常详细的数组讲解,学习必看!!!!

开门见山,这篇文章介绍Java数组的相关知识,博主还在学习中,有不足或错误还请指出,谢谢大家!!!

目录

一、数组是什么?怎么定义?

1.1 数组是什么

1.2数组的定义和初始化

二、如何打印出一个数组?

2.1 循环遍历数组

2.1.1 用for each循环遍历数组

2.2 用自带方法遍历数组

三、为什么不能直接打印数组?

3.1  JVM的内存分配

3.2 数组在内存的定义

四、有返回值为数组的方法吗?

4.1 遍历数组方法(自己写的)

4.2 数组每个值*2的方法

4.3 数组冒泡排序(常见,经典)

4.3.1 什么是冒泡排序?

4.3.2 教会你写冒泡排序

4.4 有序数组的二分查找方法

五、二维数组怎么定义呢?

5.1二维数组在JVM中内存的分配

5.2 二维数组定义与初始化

5.2.1 不规则二维数组

5.3 遍历二维数组

5.3.1. 循环遍历二维数组

5.3.2. for each 循环遍历二维数组

5.3.3. 自带的方法二维数组(推荐)

5.3.4 自带排序方法


一、数组是什么?怎么定义?

1.1 数组是什么

  数组是一种数据结构,可以用来存储多个相同类型的元素。例如一个班同学的考试成绩,都是同一个类型,但是创建很多变量又很麻烦,所以引入数组

1.2数组的定义和初始化

下面展示做法:

错误的定义方法


二、如何打印出一个数组?

2.1 循环遍历数组

  创建一个字符串用来接收数组中的值,利用循环从0下标遍历数组,最后打印字符串。

2.1.1 用for each循环遍历数组

  还可以用增强for循环来进行遍历数组,遍历array2取出每个元素放入x

2.2 用自带方法遍历数组

这里介绍idea自带的方法,来遍历数组,操作很简单


三、为什么不能直接打印数组?

为什么我们要用各种方法去遍历输出数组,而不是直接打印出来,我们先来试试,直接打印

打印出来结果是:

这说明arr本身存储的是一个如上图的信息,我们叫这个叫引用,里面包含了数组类型和一串我们叫地址的数据,我们下面来介绍在Java中数组到底是怎么存储的

3.1  JVM的内存分配

在Java虚拟机中我们有堆和栈,而数组的定义和存储就在它们两个之间进行的

3.2 数组在内存的定义

我们由图看,数组本身是一个引用,它存储在中,而实际的数据存储在中,创建成了一个对象,堆给了这串数据一个地址,然后我们的数组通过这个引用指向了这个对象,这就是他们的存储形式

我们来用另一个方法印证一下

结果是!!!!

这就印证了上面的说话,它们两个现在的分布是下面这样的,两个引用指向了同一个对象


四、有返回值为数组的方法吗?

4.1 遍历数组方法(自己写的)

这是写成方法的打印数组的方法,大家可以自己试试

从下我们就能看出数组可以作为方法的返回值方法

4.2 数组每个值*2的方法

调用方法就不展示了,大家可以直接用打印方法,打出来。

4.3 数组冒泡排序(常见,经典)

4.3.1 什么是冒泡排序?

冒泡排序是一种简单的排序算法,每次比较相邻的两个元素,如果顺序错误则交换位置,直到没有任何两个相邻元素需要交换位置为止。重复这个过程直到所有的元素都按照顺序排列。

4.3.2 教会你写冒泡排序

我们介绍一些在数组这块常用的算法,经典的冒泡排序,直接看代码

代码三个要点,理清楚你就不用去背代码了,代码是死记硬背不了的

1. 为什么我们要两个循环?

2. i < array.length-1是为什么?

3. j < array.length-1-i 是为什么?

4. 返回时这么操作的好处?

提供源码,大家复制了直接用

 public static void BubbleSort(int[]array){
        //i代表趟数,这里解释一下,如果你去1一个个数字冒泡排序,
        // 你会发现,实际需要比较的趟数是array.length-1趟。

        // j代表实际数组下标
        for (int i = 0; i <array.length-1 ; i++) {
            boolean flg = false;
            for (int j = 0; j <array.length-1-i ; j++) {
                if (array[j] > array[j+1]) {
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                    flg = true;
                }
            }
            if(flg==false){
                return ;
            }
        }

    }

4.4 有序数组的二分查找方法

直接代码讲解

定义左下标,右下标,它们的中间值用来比较

源代码:

public static int binarysearch(int[]array,int key){
        int lift = 0;
        int right = array.length;
       while(lift < right){
           int m = (lift + right)/2;
          if(array[m]==key){ 
              return m;
             } 
          else if (array[m]>key) {
              right = m;
          } else if (array[m]<key) {
              lift = m;
          }
       }
        return -1;
       }

五、二维数组怎么定义呢?

5.1二维数组在JVM中内存的分配

  实际上二维数组是一种特殊的一维数组,拿一个定义的数组画图解释:

本质上二维数组就是存储了两个引用两个对象

我们可以打印看看它们的引用

结果确实是这样


5.2 二维数组定义与初始化

 来看代码:


5.2.1 不规则二维数组


5.3 遍历二维数组

三种方式,推荐第三种

5.3.1. 循环遍历二维数组


5.3.2. for each 循环遍历二维数组


5.3.3. 自带的方法二维数组(推荐)


5.3.4 自带排序方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值