多维数组

  • 多维数组可以堪称数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个以为数组
  • 而且数组
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基础——多维数组和稀疏数组的更多相关文章

  1. 二维数组转稀疏数组、稀疏数组恢复二维数组(Java实现)

    public static void main(String[] args) { // 创建一个原始的二维数组 9*9 int chessArr1[][] = new int[9][9]; // 0表 ...

  2. 二维数组与稀疏数组的转换---dataStructures

    首先我们看一个需求 在11 * 11 的五子棋的棋盘中 我们使用0代表十字交叉点也是无效的数据 用1代表黑棋 用2代表蓝棋 那么所看到的棋盘如下 改用数字显示后就如一下样式 现在我们需要将怎个棋盘存储 ...

  3. Java基础14-多维数组

    1.二位数组可以看成以数组为元素的数组 2.java中多维数组的声明和初始化一样,应该从高维到低维的顺序进行,例如 int[][] a=new int[3][]; a[0]=new int[2]; a ...

  4. Java数组07——稀疏数组

    稀疏数组 总结: 记录有效的坐标: 记录原始做表的大小和有效值的个数 记录每一个有效值的坐标 ,变成一个新的数组 age:  package array; ​ public class ArrayDe ...

  5. Java基础(四)方法和数组

    一.方法 1.方法的定义 方法也叫函数,就是一个能独立完成某个功能的一段代码.方法可以看作一个整体. 语法: 修饰符 返回类型 方法名字(数据类型 变量名,数据类型 变量名,……[形式参数(0个到n个 ...

  6. java基础知识(三)之数组

    声明数组: 语法:数据类型[ ] 数组名://例:int[ ] scores;  或者 数据类型 数组名[ ]://例:int scores[ ];分配空间 语法:数组名 = new 数据类型 [ 数 ...

  7. Java基础学习总结(21)——数组

    一.数组的基本概念 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量. 数组的元素可以是任何数据类型,包括基 ...

  8. java基础(10)---leetcode的String、数组以及集合的一些使用

    整数 一.整数反转_7 /* 12345 变成 54321 */ public class 整数反转_7 { public static void main(String[] args){ int x ...

  9. JAVA基础学习(5)之数组

    5数组 5.1数组 5.1.1初识数组 // 输出大于平均数的所有数 Scanner in = new Scanner(System.in); int n; int[] a = new int[100 ...

随机推荐

  1. 别再面向 for 循环编程了,JDK 自带的观察者模式就很香!

    大家好,你还在面向 for 循环编程吗? 还有谁不会用观察者模式吗? 本篇栈长带来<观察者模式>理论及实战- 什么是观察者模式? 观察者模式(Observer Pattern)定义了对象间 ...

  2. go中semaphore(信号量)源码解读

    运行时信号量机制 semaphore 前言 作用是什么 几个主要的方法 如何实现 sudog 缓存 acquireSudog releaseSudog semaphore poll_runtime_S ...

  3. java面试-什么是GC root

    一.什么是垃圾 内存中已经不再被使用到的空间就是垃圾 二.要进行垃圾回收,如何判断一个对象是否可以被回收? 引用计数法 很难解决对象之间的循环引用问题 枚举根节点做可达性分析 通过一系列名为" ...

  4. JS基础学习第七天

    包装类 在JS中为我们提供了三个包装类:String() Boolean() Number()通过这三个包装类可以创建基本数据类型的对象例子: 123 var num = new Number(2); ...

  5. 安装Dynamics CRM Report出错处理一

    删除下面两个注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce.HKEY_CURRENT_USER\So ...

  6. 剑指offer--孩子们的游戏(圆圈中最后剩下的数字)

    每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指定一个数m ...

  7. 使用VS Code从零开始开发调试.NET 5

    使用VS Code 从零开始开发调试.NET 5.无需安装VS 2019即可开发调试.NET 5应用. VS Code 全称是 Visual Studio Code,Visual Studio Cod ...

  8. 【WPF】将控件事件中的参数,传递到ViewModel中

    在MVVM模式下,在通常使用命令(Command)绑定的方式的时候 ,使用的是 CommandParameter 属性进行参数的传递. 但是很多时候,有一些事件我们需要使用其中的一些事件里面的参数,以 ...

  9. 爬虫简介、requests 基础用法、urlretrieve()

    1. 爬虫简介 2. requests 基础用法 3. urlretrieve() 1. 爬虫简介 爬虫的定义 网络爬虫(又被称为网页蜘蛛.网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程 ...

  10. 基于MATLAB的手写公式识别(9)

    基于MATLAB的手写公式识别(9) 1.2图像的二值化 close all; clear all; Img=imread('drink.jpg'); %灰度化 Img_Gray=rgb2gray(I ...