java基础——多维数组和稀疏数组

放慢_脚步      2022-06-08     579

关键词:

多维数组

  • 多维数组可以堪称数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个以为数组
  • 而且数组
int a[][]= new int[2][3];

public class ArrayDemo05 {
    public static void main(String[] args) {
        /*
        1,2 array[0]
        2,3 array[1]
        3,4 array[2]
        4,5 array[3]
         */
        int[][] array ={{1,2},{2,3},{3,4},{4,5}};
        System.out.println(array.length);  //4
        System.out.println(array[1].length);  //2
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.println("array["+i+"]["+j+"]:"+array[i][j]);
            }
        }
    }
}

Array类

  • 数组的工具类java.util.Arrays
  • 由于数组对象本身并灭有什么方法可以供我们调用。但API中提供工了一个工具类Array供我们使用,从而可以数据对象进行一些基本的操作。
  • 查看JDK帮助文档
  • Array类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用。(注意:是不用 not 不能)
  • 具有一下常用功能:
    • 给数组赋值:通过fill方法
    • 对数组排序:通过sort方法,按升序
    • 比较数组:通过equals方法比较数组中元素是否相等
    • 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
public class ArrayDemo06 {
    public static void main(String[] args) {
        int[] a ={1,23,45,5,5656,6,6,5,54,4,44};
        // 打印数组元素 Array.toString
        System.out.println(Arrays.toString(a));
        System.out.println("================");
        //对数据进行排序 Arrays.sort
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
        System.out.println("****************");
        // 对数组的元素进行填充
        Arrays.fill(a,2,5,0);
        System.out.println(Arrays.toString(a));
    }
}

冒泡排序

  • 最为出名的排序方法。(总共有八种排序方法)
  • 两层循环,外层冒泡轮数,内层一次比较
  • 我们看到嵌套循环,应该立刻得出这个算法的时间复杂度为O(^2)
import java.util.Arrays;

public class ArrayDemo01 {

    public static void main(String[] args) {
        //冒泡排序
        //1.
        //2.
        //3.
        int[] a ={12,2,3,4,5,34,23,28,54,10};
//        int[] sort = sort(a);
//        for (int x : a) {
//            System.out.print(x+"  ");
//        }
        int[] sort = sort(a);
        String string = Arrays.toString(sort);
        System.out.println(string);
    }

    //冒泡排序功能
    public static int[] sort (int[] array){
        int temp = 0;
        //外层:判断执行多少次,array.length-1次
        for (int i = 0; i < array.length-1; i++) {
            // 优化算法:
            // 减少没有意义的比较
            boolean flag =  false;
            //比较两个数的大小,并且交换位置
            for (int j = i+1; j <array.length; j++) {
                if (array[i]>array[j]){
                    temp = array[i];
                    array[i] =array[j];
                    array[j] = temp;
                    flag = true;
                }
            }
            if (flag = false){
                break;
            }
        }
        return array;
    }
}

稀疏数组

  • 当一个数组中大部分元素为0,或者同一个值的数组时,可以使用稀疏数组来保存该数组。
  • 稀疏数组的处理方式是:
    • 记录数组一共有几行几列,有多少不同值
    • 把具体的不同值的元素的 行 列 及值记录在一个小规模的数组中,从而缩小程序的规模
例如:编写五子棋游戏中,有存盘和退出的功能:
array[1][2]= 1;array[2] [3]=2,总共,原数列:11行,11列,两个有效数字
则转化成稀疏阵列为:
11,11,2
1, 2, 1
2, 3, 3
// 设计程序时,重点要抓住,稀疏数组只有3列。
public class ArrayDemo02 {
    public static void main(String[] args) {
        int[][] array = new int[11][11];
        array[1][2] =1;
        array[2][3] =2;

        //打印二维数组元素
        for (int[] ints : array) {
            for (int x : ints) {
                System.out.print(x+"  ");
            }
            System.out.println(); //换行
        }
        //转化为稀疏数组
        //获取有效值的个数
        int sum = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j] != 0){
                    sum++;
                }
            }
        }
        System.out.println("有效值的个数:"+sum);

        //确定建立稀疏数组的大小
        //稀疏数组表头的初始化
        int[][] array2 = new int[sum+1][3];
        array2[0][0] = array.length;
        array2[0][1] = array[0].length;
        array2[0][2] = sum;
        //遍历二维数组,将非0的数据储存到稀疏数组中
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j] != 0){
                    for (int k = 1; k < sum+1; k++) {
                        array2[k][0] = i;
                        array2[k][1] = j;
                        array2[k][2] = array[i][j];
                    }
                }
            }
        }

        System.out.println("$$$$$$$$$$$$$$$$$$$$$");
        System.out.println("打印稀疏数组:");
        //打印稀疏数组
        for (int[] ints : array2) {
            for (int x : ints) {
                System.out.print(x+"  ");
            }
            System.out.println(); //换行
        }
        //还原稀疏数组
        //读取稀疏数组
        int a = array2[0][0]; //原数列的行数
        int b = array2[0][1]; //原数列的列数
        int c = array2[0][2]; //原数列的有效个数
        int[][] array3 = new int[a][b];
        for (int i = 1; i < array2.length; i++) {
                array3[array2[i][0]][array2[i][1]]= array2[i][2];
        }
        System.out.println("$$$$$$$$$$$$$$$$$$$$$");
        System.out.println("打印还原后的稀疏数组:");
        //打印二维数组元素
        for (int[] ints : array) {
            for (int x : ints) {
                System.out.print(x+"  ");
            }
            System.out.println(); //换行
        }
    }
}

java面试会问的——数组声明初始化冒泡多维数组稀疏数组(代码片段)

数组数组时相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成其中,每一个数据称作一个数组元素,每一个数组元素可以通过一个下标来访问它们。数组声明创建首先必... 查看详情

java基础|深入理解多维数组

重点陈述:把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格。对于二维数组的理解,我们可以看成是一维数组。其实,从数组底层的运行机制来看,其实没有多维数组。0x00、二维数组[][]:数组中的数组动... 查看详情

java基础14-多维数组

1.二位数组可以看成以数组为元素的数组2.java中多维数组的声明和初始化一样,应该从高维到低维的顺序进行,例如 1int[][]a=newint[3][];2a[0]=newint[2];3a[1]=newint[4];4a[2]=newint[3];5intt[][]=newint[][4];//非法实例:1/*声明一个二位数组,3行2... 查看详情

数据结构习题之多维数组和广义表

第五章多维数组和广义表     一、基本要求、重点、难点    本章目的是介绍多维数组的逻辑结构特征及其存储方式。特殊矩阵和稀疏矩阵的压缩存储方法。本章重点是熟悉多维数组的存储方式、... 查看详情

R中的多维稀疏数组(3路张量)

】R中的多维稀疏数组(3路张量)【英文标题】:Multidimensionalsparsearray(3-waytensor)inR【发布时间】:2012-11-2821:38:27【问题描述】:使用Matrix包我可以创建一个二维稀疏矩阵。有人能推荐一个包,让我在R中创建一个多维(特别是3维... 查看详情

java算法--稀疏数组

...队列,链表,栈非线性结构非线性结构包括:二维数组,多维数组,广义表,树结 查看详情

java实现稀疏数组

1、概念如果一个数组(包括多维数组)中的大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组,节约空间。一般来说,稀疏数组的处理方法是:1.记录数组一共有几行几列,有多少个不同的数值。2.把具有... 查看详情

java实现稀疏数组

1、概念如果一个数组(包括多维数组)中的大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组,节约空间。一般来说,稀疏数组的处理方法是:1.记录数组一共有几行几列,有多少个不同的数值。2.把具有... 查看详情

java基础-数组(回顾)(代码片段)

文章目录Java数组1、数组的定义1.1、数组的声明创建1.2、内存分析1.3、数组的三种初始化1.4、数组的基本特点1.5、数组边界2、数组的使用2.1、For-Each循环2.2、数组作方法入参2.3、数组作返回值3、多维数组4、Arrays类5、冒泡排序6、... 查看详情

08.18javascript06数组数组的概念创建数组读取数组中的元素稀疏数组添加和删除数组的元素数组遍历多维数组数组的方法类数组对象作为数组的字符串

#数组###数组的概念* 数组是值的有序集合* 数组中的每个值称之为元素* 每个元素可以是任意数据类型的值* 每个元素都有索引(下标)* 元素的索引从0开始,按照顺序递增。元素最大的索引2^32-2###创建数组*&nbs... 查看详情

java描述算法和结构(01):稀疏数组和二维数组转换

本文源码:GitHub·点这里||GitEE·点这里一、基本简介1、基础概念在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩... 查看详情

“全栈2019”java第三十一章:二维数组和多维数组详解

难度初级学习时间10分钟适合人群零基础开发语言Java开发环境JDKv11IntelliJIDEAv2018.3文章原文链接“全栈2019”Java第三十一章:二维数组和多维数组详解下一章“全栈2019”Java第三十二章:增强for循环Foreach语法学习小组加入同步学习... 查看详情

java基础知识点笔记总结(代码片段)

文章目录1.eclipse操作2.数组定义和概述3.数组静态初始化和动态初始化4.获取数组长度和遍历数组5.不同类型数组的默认值6.数组的内存解析7.多维数组8.二维数组获取长度和遍历数组9.多维数组的默认值10.二维数组的内存解析11.数... 查看详情

二维及多维数组的存储原理及寻址方式;矩阵的存储及基本操作;三元组表和十字链表存储的稀疏矩阵的基本操作

查看详情

java数据结构和算法之稀疏数组

1.定义稀疏数组可以看做是普通二位数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组,关于稀疏数组的运用有五子棋盘,地图等..*当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀... 查看详情

java基础学习——数组初识

Java基础学习——数组初识(1)1什么是数组Java中常见的一种数据结构就是数组,数组可以分为一维数组、二维数组和多维数组。数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元... 查看详情

java基础学习——数组初识

Java基础学习——数组初识(1)1什么是数组Java中常见的一种数据结构就是数组,数组可以分为一维数组、二维数组和多维数组。数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元... 查看详情

day551.稀疏数组-数据结构和算法java(代码片段)

稀疏数组一、什么是稀疏数组稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组二、分析需求案例将左侧的二维数组,通过稀疏数组的方式,转变为右侧的数组结构... 查看详情