[Java][华为云Java编程创造营][学习笔记][第三阶段][02_Java数组]

举报
John2021 发表于 2021/12/03 19:10:21 2021/12/03
【摘要】 1,数组的定义和使用 1.1,数组的定义和作用数组是一种数据类型,存储相同数据类型的一组数据。声明一个变量就是在内存中开辟一个空间。声明数组就是在内存中开辟一串连续的空间。 数组的定义方式 动态初始化初始化时只指明长度,由系统为数组分配初始值格式:数据类型[] 数组名 = new 数据类型[数据长度]范例:int[] arr = new int[3] 静态初始化声明数组的同时对数组元素赋初...

1,数组的定义和使用

1.1,数组的定义和作用

  • 数组是一种数据类型,存储相同数据类型的一组数据。
  • 声明一个变量就是在内存中开辟一个空间。
  • 声明数组就是在内存中开辟一串连续的空间。

数组的定义方式

动态初始化

  • 初始化时只指明长度,由系统为数组分配初始值
  • 格式:数据类型[] 数组名 = new 数据类型[数据长度]
  • 范例:int[] arr = new int[3]

静态初始化

  • 声明数组的同时对数组元素赋初始值
  • 格式:数据类型[] 数组名 = new int[]{元素1取值,元素2取值,…}
  • 范例:int[] arr = new int[]{1,2,3,4}
  • 简化格式:数据类型[] 数组名 = {元素1取值,元素2取值,…}
  • 范例:int[] arr = {1,2,3,4}
public class ArrayDemo1
{
    public static void main(String[] args)
    {
        //1,动态定义
        int[] arr = new int[3];//数组arr中只能存放三个int类型的整数
        //2,静态定义
        int[] arr1 = new int[]{1, 2, 3, 4};
        //3,简写
        int[] arr2 = {1, 2, 3, 4};
    }
}

数组元素访问

  • 格式:数组名[索引]

索引是数组中数据的编号方式,用于访问数组中的数据

  • 特征1:索引从0开始
  • 特征2:索引是连续的
  • 特征3:索引逐一增加,每次加一
public class ArrayDemo2
{
    public static void main(String[] args)
    {
        int[] arr = new int[3];
        System.out.println(arr);//输出数组名
        System.out.println(arr[0]);//输出0,第一个元素
        System.out.println(arr[1]);//输出0,第二个元素
        System.out.println(arr[2]);//输出0,第三个元素
    }
}

Java中内存分配

  • 程序在运行中,需要在内存中分配空间,为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

栈内存:存储局部变量

  • 定义在方法中的变量,例如:arr
  • 使用完毕,立即消失

堆内存:存储new出来的内容(实体,对象)

数组在初始化时,会为存储空间添加默认值

  • 整数:默认值0

  • 浮点数:默认值0.0

  • 布尔:默认值false

  • 字符:默认值空字符

1.2,数组遍历

什么是数组遍历?

  • 获取数组中的每个元素
public class Test
{
    public static void main(String[] args)
    {
        int[] arr = {1, 2, 3, 4};
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        System.out.println(arr[3]);
    }
}

for循环

  • 循环次数:数组长度-1
public class Test
{
    public static void main(String[] args)
    {
        int[] arr = new int[]{1, 2, 3, 4, 5};
        for (int i = 0; i < 5; i++)
        {
            System.out.println(arr[i]);
        }
    }
}

动态数组长度

  • 格式:数组名.length
  • 范例:arr.length

数组遍历的通用格式

public class Test
{
    public static void main(String[] args)
    {
        int[] arr = {1, 2, 3, 4};
        for (int i = 0; i < arr.length; i++)
        {
            arr[i];//对arr[i]操作
        }
    }
}
//遍历数组中每个元素
public class Test
{
    public static void main(String[] args)
    {
        String[] arr = {"语文", "数学", "英语", "编程"};
        //i:为数组索引 从0开始[0,3]
        //动态表示数组长度:数组名.length
        for (int i = 0; i < arr.length; i++)
        {
            System.out.print(arr[i] + "  ");//语文  数学  英语  编程  
        }
    }
}

1.3,数组中的数组

什么是数组中的数组?

  • 数组中的每个元素也是一个数组

数组中的数组语法

  • 格式:数据类型[][] 数组名 = new 数据类型[外层数组长度][内层数组长度]
  • 范例:int[][] score = new int[3][5]
public class Test
{
    public static void main(String[] args)
    {
        int[][] score = new int[3][5];
        //第一个班级五个学生成绩
        score[0][0] = 80;
        score[0][1] = 67;
        score[0][2] = 45;
        score[0][3] = 50;
        score[0][4] = 88;
    }
}

数组中的数组内存图

数组中的数组遍历

public class Test
{
    public static void main(String[] args)
    {
        int[][] score = new int[3][5];
        //第一个班级五个学生成绩
        score[0][0] = 80;
        score[0][1] = 67;
        score[0][2] = 45;
        score[0][3] = 50;
        score[0][4] = 88;
        //第一个班级的5个学生成绩
        for (int i = 0; i < score[0].length; i++)
        {
            score[0][i];//对score[0][i]操作
        }
        //第二个班级的5个学生成绩
        for (int i = 0; i < score[1].length; i++)
        {
            score[1][i];//对score[1][i]操作
        }
        //第三个班级的5个学生成绩
        for (int i = 0; i < score[2].length; i++)
        {
            score[2][i];//对score[2][i]操作
        }
    }
}

数组中的数组遍历

1.4,数组的排序

什么是排序?

  • 是指将数组元素按照从小到大或者从大到小的重新排列。
  • 对于元素较多的数组,排序算法的优劣至关重要。
  • 一般情况下,通过排序过程中数组元素的交换次数来衡量排序算法的优劣
  • 常用的排序算法有:插入排序,冒泡排序,快速排序等。

数组冒泡排序算法

  • 冒泡排序的原则:比较相邻的元素,如果违反最后的顺序准则,则交换

冒泡排序可以简单理解为:

  • 第一次找到所有元素中最大的放在最后一个位置,不再变动。
  • 第二次找到剩余所有元素中最大的放在倒数第二个位置上,不再变动。
  • 以此类推,直到排序完成。

数组冒泡排序分析

public class ArrayDemo4
{
    public static void main(String[] args)
    {
        int[] arr = {89, 50, 84, 57, 21};
        for (int j = 1; j < arr.length; j++)//表示轮数
        {
            //第一轮 比较4次
            for (int i = 0; i < arr.length - j; i++)//j=1 4 j=2 3 j=3 2 //表示一轮中要比较的次数
            {
                //如果前面的那个数大于后面的数就交换位置
                if (arr[i] > arr[i + 1])
                {
                    //引入中间变量以交换数值
                    int t = arr[i + 1];
                    arr[i + 1] = arr[i];
                    arr[i] = t;
                }
            }
        }
        //遍历输出数组中的元素
        for (int i = 0; i < arr.length; i++)
        {
            System.out.print(arr[i] + " ");//21 50 57 84 89 
        }
    }
}

1.5,数组的最大最小过滤重复

数组的最大值

  • 定义一个变量存放最大值,假设数组中的第一个元素为该变量的初始值,该变量跟数组中的其他数进行比较,如果遇到比该值更大的就重新赋值,比较完之后,最后该变量里面存放的就是数组中的最大值。
public class ArrayMaxDemo
{
    public static void main(String[] args)
    {
        //定义一个数组 arr
        int[] arr = {1, 2, 3, 4, 5};
        //定义 max 变量存放最大值,假设数组 arr 的第一个元素为最大值
        int max = arr[0];
        //初始最大值跟数组中的其他元素进行比较,如果有比该值更大的就替换
        for (int i = 1; i < arr.length; i++)
        {
            if (max < arr[i])
            {
                //进行替换操作
                max = arr[i];
            }
        }
        //输出最大值
        System.out.println(max);
    }
}

数组的最小值

  • 定义一个变量存放最小值,假设数组中的第一个元素为该变量的初始值,该变量跟数组中的其他数进行比较,如果遇到比该值更小的就重新赋值,比较完之后,最后该变量里面存放的就是数组中的最小值。
public class ArrayMinDemo
{
    public static void main(String[] args)
    {
        int[] arr = {5, 4, 3, 2, 1};
        //定义一个变量来存放最小值
        int min = arr[0];
        for (int i = 1; i < arr.length; i++)
        {
            //如果下一个元素更小,则替换
            if (min > arr[i])
            {
                min = arr[i];
            }
        }
        //输出最小值
        System.out.println(min);//1
    }
}

数组的过滤重复

  • 去掉数组中重复的数据,给每个元素一个标记,每个元素跟数组中其他元素进行比较,如果完全相同就改变原有标记,将没有改变标记的元素重新放入一个新的数据,并统计其个数,最终将新的数组的数据复制到另一个新的数组中。
  • 使用System.arraycopy()方法可以实现数组的复制。
public class ArrayCopy
{
    public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
    {
        //src,源数组
        //srcPos,源数组中的起始位置
        //dest,目标数组
        //destPos,目标数组中的起始位置
        //length,要复制的数组元素的数量
    }
}
import java.util.Arrays;

public class Test
{
    public static void main(String[] args)
    {
        int[] arr = {12, 34, 23, 12, 45, 57, 45, 89};
        int t = 0;
        int[] tempArr = new int[arr.length];//临时数组
        for (int i = 0; i < arr.length; i++)//遍历原数组
        {
            boolean isTrue = true;//声明一个标记
            for (int j = i + 1; j < arr.length; j++)//内层循环将原数组的元素逐个比较
            {
                if (arr[i] == arr[j])//发现重复的数据改变其标记并结束程序
                {
                    isTrue = false;
                    break;
                }
            }
            if (isTrue)//判断标记是否被改变如果没有被改变就是没有重复元素
            {
                tempArr[t] = arr[i];//没有元素就将原数组的元素赋值给临时数组
                t++;//记录没有重复的数字个数
            }
        }
        int[] newArr = new int[t];
        System.arraycopy(tempArr, 0, newArr, 0, t);
        System.out.println(Arrays.toString(newArr));//[34, 23, 12, 57, 45, 89]
    }
}

1.6,数组的常用类Arrays

Arrays类常用方法

  • Arrays类包含用于操作数组的各种方法
方法名 说明
public static String toString(int[] a) 可返回指定数组的内容的字符串表示形式
public static void sort(int[] a) 可按照数字从小到大顺序排列指定的数组
public static long[] copyOf(long[] original,int newLength) 复制指定的数组,original:要复制的数组,newLength:新数组的长度
import java.util.Arrays;

public class ArrayDemo8
{
    public static void main(String[] args)
    {
        int[] arr = {12, 3, 45, 67, 44, 2};
        //Arrays.toString(数组):按照一定格式输出数组中的每个元素
        System.out.println(Arrays.toString(arr));//[12, 3, 45, 67, 44, 2]

        //Arrays.sort(数组):按照数字从小到大的顺序排列数组里的元素
        Arrays.sort(arr);
        //输出排序后的数组
        System.out.println(Arrays.toString(arr));//[2, 3, 12, 44, 45, 67]

        //Arrays.copyOf(原数组,新数组长度):实现数组的复制
        arr = Arrays.copyOf(arr, 7);
        //给最后一个元素赋值
        arr[6] = 10;
        System.out.println(Arrays.toString(arr));//[2, 3, 12, 44, 45, 67, 10]
    }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。