逸学java【初级菜鸟篇】6.数组

hi,我是逸尘,一起学java吧


目标(任务驱动)

1.请掌握数组的内容。

场景:工作已经第三天了,你开始遇到了一些数据结构的问题,这时你大脑中,突然想到数组......

2.请掌基本的数组排序算法。

场景:同事也是新来实习的小王,他在谈论他的的期末考试内容还有一题是冒泡排序,你微微一笑,感觉很简单,但是突然大脑卡壳.....

数组

数组是非常常见的数据结构,是同类型的基本数据类型序列的标识符,我们可以用统一的标识名(数组名)和下标确定这些同类型的基本数据类型序列的标识符(元素)。

ps:数据结构也非常重要,我们会在单独的篇章去详细的讲解。

同种数据类型的数据集合,比如书法,草书,楷书,行书,再比如我们的兵,马,炮等的集合,我们称为象棋.还有一个养鸭场有 3只鸭,它们的体重分别是 3斤,4斤,3.5斤,我们称为这三只鸭的重量。在我们程序设计里,可以把这些集合成为数组。

那简单的说明一下,数组就是用来存储一批同种类型数据的内存区域。

一维数组

一维数组就是同类型数据的线性集合,传递一组线性的数据时可以使用它。

创建一维数组

创建(声明)一维数组有两种方式

第一种

数组元素类型  数组名称[];

或者

数组元素类型[]  数组名称;

第二种

数组元素类型[]  数组名称 =new  数组元素类型[数组元素的个数]

初始化一维数组

放入初始的内容

声明有两种,初始化也是对应有两种

第一种也是我们最常用的

数组元素类型  数组名称[]={元素1,元素2,元素3}

 

第二种

数组元素类型[]  数组名称 =new  数组元素类型[]{元素1,元素2,元素3}

数组的注意点

1.数组是引用类型

package com.ydrj.xb;

public class Seven {
    public static void main(String[] args) {
        int[] arr ={1,2,4,5};
        System.out.println(arr);
    }
}

我们打印这个arr发现他是这样的一个东西

实际上数组是引用数据类型,不是基本数据类型(我们之前学的,也没有这个)

2. 一旦确定类型就不能放其他基本类型

整数类就不能放浮点类型

3.在我们前面初始化后,内容是固定的,(长度,类型)不可以变化,我们也成为静态初始化

当然也可以动态初始化

动态初始化

定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据。 

其实就是我们创建数组的第二种写法就行了,那么它的初始值默认为0,后面再加数据。

package com.ydrj.xb;

public class Seven {
    public static void main(String[] args) {
        int[] arr =new int[3];
        arr[1]=10;
        System.out.println(arr[1]);
        System.out.println(arr[0]);
        System.out.println(arr[2]);
    }
}

当前已经知道存入的元素值,用静态初始化也就是 数组元素类型  数组名称[]={元素1,元素2,元素3}

当前还不清楚要存入哪些数据,用动态初始化也就是 数组元素类型[]  数组名称 =new  数组元素类型[数组元素的个数]。

4.当索引位置大于数组长度,会报错误数组越界异常

java.lang.ArrayIndexOutOfBoundsException

数组的基本操作

数组遍历

我们在流程控制的时候学习过foreach语句他就可以方便的帮我们遍历数组

普通的数组遍历方式

package com.ydrj.xb;

public class Seven {
    public static void main(String[] args) {
        int[] arr ={1,2,5};
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

foreach遍历方式

package com.ydrj.xb;

public class Seven {
    public static void main(String[] args) {
        int[] arr ={1,2,5,7,3};
        for (int x:arr) {
            System.out.println(x);
        }
    }
}

数组长度

数组名称.length

数组的访问

我们知道数组是引用数据类型,那么我们如何访问

数组名称[引索]

package com.ydrj.xb;

public class Seven {
    public static void main(String[] args) {
        int[] arr ={1,2,5};
        System.out.println(arr[0]);
        System.out.println(arr.length);
    }
}

下标(索引)是0到数组的长度(length)-1

填充替换

在数组中元素定义完成后,可以通过Arrays类的fill()来对数组元素替换。

有两种参数类型,以int类型为例

fill(int[] a,int value)

a:要替换的数组名

value 替换的值

如果替换,这个数组内所有内容都会被替换成value

fill(int[] a,int fromindex,int toindex,   int value)

fromindex:要填充的起点(包括)

toindex:到最后一个范围(不包括)

package com.ydrj.xb;

import java.util.Arrays;

public class Seven {
    public static void main(String[] args) {
        int[] arr ={1,2,5,7,3};
        Arrays.fill(arr,1,3,6);
        for (int x:arr) {
            System.out.println(x);
        }
    }
}

 

 数组排序

Arrays类的f静态方法sort()可以对数组进行排序。

其中对int是从小到大,对String是字典排序的,数字在字母前,大写字母在小写字母前。

package com.ydrj.xb;

import java.util.Arrays;

public class Seven {
    public static void main(String[] args) {
        int[] arr ={1,2,5,7,3};
        Arrays.sort(arr);
        for (int x:arr) {
            System.out.println(x);
        }
    }
}

 

 复制数组

Arrays提供了copyOf()和copyOfRange()

copyOf(arr,类型 newlength)

arr:要复制的数组

newlength:新的数组长度,如果说新的数组长度大于要复制的数组长度则后面补0

copyOfRange(arr,int formindex,int toindex)

arr:要复制的数组

formindex:开始复制数组的索引(包括)  0~arr.length 

toindex: 复制结束数组索引(不包括) 可以大于数组长度,补0

package com.ydrj.xb;

import java.util.Arrays;
public class Seven {
    public static void main(String[] args) {
        int[] arr ={1,2,5,7,3};
        int[] brr=Arrays.copyOfRange(arr,1,10);
        for (int x:brr) {
            System.out.println(x);
        }
    }
}

查询数组

同样是Arrays类的方法,binarySearch()方法,他是使用二分搜索指定数组的,获得指定对象。

冒泡排序

package com.ydrj.xb;

public class BubbleSort {
    public static void main(String[] args) {
        //冒泡,从小到大排列
            int[] arr = {5, 2, 3, 8, 1};
            //轮数
            for (int i = 1; i <= arr.length - 1; i++) {
                //内部一轮会排出一个最大值放到最后
                for (int j = 0; j < arr.length - 1; j++) {
                    //前面大就调换位置
                    if (arr[j] > arr[j + 1]) {
                        //把大的赋给空值里
                        int temp = arr[j];
                        //把小值替换到前面
                        arr[j] = arr[j + 1];
                        //大值替换到后面
                        arr[j + 1] = temp;
                    }
                }
            }
            //普通遍历一下结果
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + "\t");
            }
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员逸尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值