多维数组

  • 多维数组可以看成是数组的数组, 比如二维数组就是一个特殊的一维数组, 其每1个元素都是一个一维数组.

  • 二维数组

    int a[][] = new int[2][5];
    

    以上二维数组可以看成一个两行五列的数组

  • 多维数组的使用

package com.ntru.demo.test.array;public class ArrayDemo05 {public static void main(String[] args) {//[4][2]  面向对象/*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[2][0]);System.out.println(array[2][1]);System.out.println(array.length);System.out.println(array[0].length);for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {System.out.println(array[i][j]);}}}
}

Arrays类

  • 数组的工具类 java.util.Arrays
  • 由于数组对象本身并没有什么方法可以供我们调用, 但API中提供了一个工具类Arrays供我们使用, 从而可以对数据对象进行一些基本操作.
  • 查看JDK帮助文档
  • Arrays类中的方法都是static修饰的静态方法, 在使用的时候可以直接使用类名进行调用, 而"不用"使用对象来调用(注意: 是"不用"而不是"不能")
  • 具有以下常用功能
    • 给数组赋值: 通过fill方法
    • 给数组排序: 通过sort方法, 按升序
    • 比较数组, 通过equals方法比较数组中元素值是否相等
    • 查找数组元素: 通过binarySearch方法能对排序好的数组进行二分查找操作
package com.ntru.demo.test.array;import java.util.Arrays;public class ArrayDemo06 {public static void main(String[] args) {int[] a = {1,2,3,9999,31231,543,21,3,23};System.out.println(a);//[I@6d6f6e28//打印数组元素Arrays.toStringSystem.out.println(Arrays.toString(a));Arrays.sort(a);//数组进行排序  升序System.out.println(Arrays.toString(a));Arrays.fill(a,2,4,0);//2  4 被0填充Arrays.fill(a,0);//数组填充, 将0填充System.out.println(Arrays.toString(a));}public static void printArray(int[] a){for (int i = 0; i < a.length; i++) {if(i==0){System.out.print("[");//不换行}if(i==a.length-1){System.out.print(a[i]+"]");}else{System.out.print(a[i]+",");}}}
}

冒泡排序

  • 冒泡排序无疑是最出名的排序算法之一, 总共有八大排序.
  • 冒泡排序的代码相对简单, 两层循环, 外面冒泡轮数, 里层依次比较
  • 时间复杂度O(n2)
package com.ntru.demo.test.array;import java.util.Arrays;public class ArrayDemo07 {public static void main(String[] args) {int[] a = {1,4,6,7,9,25,6,7};int[] sort = sort(a);System.out.println(Arrays.toString(sort));}/*冒泡排序比较数组中, 两个相邻元素, 如果第一个数比第二个数大, 我们该交换他们的位置每一次比较 都会产生一个最大的或者最小的数下一轮可以少1次排序一次循环 知道结束*/public static int[] sort(int[] array){//定义临时变量int temp = 0;//外层循环for (int i = 0; i < array.length-1 ; i++) {boolean flag = false;//通过flag标识位减少没有意义的比较//如果如果第一个数比第二个数大则交换位置for (int j = 0; j < array.length-1 ; j++) {if(array[j+1] < array[j]){temp = array[j];array[j] = array[j+1];array[j+1] = temp;flag = true;}}if(flag==false){break;}}return array;}
}

稀疏数组

  • 需求: 编写五子棋游戏中, 有存盘退出和续上盘的功能.

  • 当一个数组中大部分元素为0, 或者为同一值的数组时, 可以使用稀疏数组来保存该数组.

  • 稀疏数组的处理方式:

    • 记录数组一共有几行几列, 有多少个不同值.
    • 把具有不同值的元素和列及值记录在一个小规模的数组中, 从而缩小程序的规模.
package com.ntru.demo.test.array;public class ArrayDemo08 {public static void main(String[] args) {/*创建一个二维数组  11*11  0: 没有旗子  1 :黑棋  2: 白旗*/int[][] array1 = new int[11][11];array1[1][2] = 1;array1[2][3] = 2;///输出原始数组System.out.println("输出原始数组");for (int[] ints : array1) {for (int anInt : ints) {System.out.print(anInt + "\t");}System.out.println();}/*转换为稀疏数组获取有效值的个数*/int sum = 0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (array1[i][j] != 0) {sum++;}}}System.out.println("有效值的个数: " + sum);//创建一个稀疏数组的数组int[][] array2 = new int[sum + 1][3];array2[0][0] = 11;array2[0][1] = 11;array2[0][2] = sum;//遍历二维数组 将非零的值 存放稀疏数组int count = 0;for (int i = 0; i < array1.length; i++) {for (int j = 0; j < array1[i].length; j++) {if (array1[i][j] != 0) {count++;array2[count][0] = i;array2[count][1] = j;array2[count][2] = array1[i][j];}}}//输出稀疏数组System.out.println("稀疏数组");for (int i = 0; i < array2.length; i++) {System.out.println(array2[i][0] + "\t" + array2[i][1] + "\t" + array2[i][2] + "\t");}System.out.println("-------------");System.out.println("还原");//读取稀疏数组int[][] array3 = new int[array2[0][0]][array2[0][1]];//给其中的元素还原它的值for (int i = 1; i < array2.length; i++) {array3[array2[i][0]][array2[i][1]] = array2[i][2];}//打印System.out.println();for (int[] ints : array3) {for (int anInt : ints) {System.out.print(anInt + "\t");}System.out.println();}}
}

多维数组(冒泡排序,稀疏数组)相关推荐

  1. 二维数组转稀疏数组,写入文件后再读取文件,将内容转回二维数组

    该方法模拟的是将棋盘的位置保存到稀疏数组中,降低存储的数据量,通过写入磁盘做持久化,再读入后恢复棋盘内容. package com.moson.sparsearray;import java.io.* ...

  2. 数据结构学习-二维数组与稀疏数组转换

    package 稀疏数组和队列;public class 稀疏数组 {public static void main(String[] args) {// TODO Auto-generated me ...

  3. Java实现二维数组和稀疏数组的转换

    文章目录 稀疏数组 二维数组-->稀疏数组 稀疏数组-->二维数组 完整code 稀疏数组 简介:当编写的二维数组中存在很多不用的点但初始化时都赋值为0时,这个二维数组的观赏性很低并且非常 ...

  4. 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现

    文章目录 基本介绍 应用实例 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: ①记录数组一共有几行几列,有多少个不同的值(0除外) ...

  5. 二维数组转化稀疏数组

    二维数组转化为稀疏数组,稀疏数组写到磁盘,读取磁盘数据文件map.data,还原为稀疏数组,稀疏数组还原为二维数组. package sparseArray;/*** 11*11二维数组转稀疏数组** ...

  6. 以五子棋为背景的二维数组和稀疏数组(节省空间)的转换、用io流实现本地磁盘的存储

    目录 用二维数组来表示一个棋盘: 将二维数组转换为稀疏数组 1.先遍历二维数组,得到非0数据的个数 2.创建稀疏数组 3.输出稀疏数组 利用io流实现与本地文件的交互 ①.把稀疏数组存入本地文件中 ② ...

  7. 【二维数组与稀疏数组的相互转化】

    稀疏数组 简介 一.将二维数组转化成稀疏数组 二.将稀疏数组转化为原二维数组 简介 当一个二维数组大部分是0,或者为同一个值的数组时(即有效数据远小于无效数据时),可以用稀疏数组. 具体格式如下 下标 ...

  8. 什么是稀疏数组?稀疏数组详解

    [1]背景 如下图所示,这里有一个 15 × 15 的棋盘,如果现在要让你通过编码的方式,让你将这盘棋局保存起来,你会怎么做呢? 面对行列数据的保存,我相信大多人第一时间都会想到用二维数组进行保存. ...

  9. 五子棋--java数组实现稀疏数组保存棋盘

    在五子棋游戏中,我们用一个二维数组来保存数据,然后将数据保存到本地文件,需要的时候恢复出来 因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据,故将二维数组转换成稀疏数组,再保存到文档中. ...

最新文章

  1. 「树莓派+1万块乐高」打造乐高分类器,树莓派官方转发,网友:我想借来用两天...
  2. UA MATH565C 随机微分方程II Wiener过程简介
  3. luogu P2572 [SCOI2010]序列操作
  4. 初探swift语言的学习笔记二(可选类型?和隐式可选类型!)
  5. 如何使用bootstrap实现轮播图?
  6. 《2021国庆出行报告》出炉:全国高速拥堵里程占比同比下降37%
  7. SAP License:SAP技术人员路在何方?
  8. 为什么使用nginx反向代理
  9. 基于asp.net C#中小型超市库存管理系统
  10. Mars《Android开发视频教程》
  11. 这些信用卡取现可以免除手续费!
  12. 用计算机如何判断闰年,php判断/计算闰年的方法小结【三种方法】
  13. Ubuntu 耳机和音响没有声音
  14. R语言使用rcauchy函数生成符合柯西分布的随机数、使用plot函数可视化符合柯西分布的随机数(Cauchy distribution)
  15. Surfaceview调用Camera实现拍照
  16. bool 和_Bool的使用
  17. Android BroadcastReceiver
  18. MySQL调优系列:慢查询记录
  19. 亚马逊、速卖通、wish、Lazada、shoppe、ebay、煤炉测评跟淘宝shua单区别在哪?
  20. C++小游戏(第四弹)

热门文章

  1. AOP 中必须明白的概念-切面(Aspect)
  2. jenkins docker脚本
  3. SVN目录结构及作用
  4. Oracle之SQL分析函数
  5. 区块链相关数据报表_重磅|京东云区块链数据服务(BDS)正式开源
  6. php html 文本域,html文本域标签属性有哪些?html文本域标签属性用法介绍
  7. jar打包 剔除第三方依赖以及它的依赖_为什么Spring Boot的 jar 可以直接运行?
  8. permission denied和linux赋值权限chmod命令
  9. Linux下tar.xz结尾的文件的解压方法
  10. Java转iOS-第一个项目总结(2)