【系列04】数组 多维数组 冒泡排序 稀疏数组[有目录]

news2024/11/28 12:36:54

数组声明和创建

  • 变量类型 变量名称 =变量的值

    • 声明数组

      int []nums;//定义
       //上面是首选
      /*也可以 int nums2[];*/
      

    下面这种写法是为了迎合c与c++用户的喜爱,更推荐用上面的定义 方式

    • 创建数组

      nums=new int[10];
      
    • 定义数组计算数组的和

      package com.SunAo.array;
      //变量类型  变量名称 =变量的值;
      //数组类型
      public class ArrayDemo01 {
          public static void main(String[] args) {
              int []nums;//定义
              //上面是首选
             /*也可以 int nums2[];*/
              nums=new int[10];//这里面可以存放10个 int类型的数值
              nums[0]=1;
              nums[1]=2;
              nums[2]=3;
              nums[3]=4;
              nums[4]=5;
              nums[5]=6;
              nums[6]=7;
              nums[7]=8;
              nums[8]=9;
              nums[9]=10;
              //计算所有元素的和
              int sum =0;
              //获取数组长度:arrays.Length
              for (int i = 0; i < nums.length; i++) {
                  sum=sum+nums[i];
              }
              System.out.println("总和为:"+sum);
          }
      }
      
    • 注意:数组元素通过索引访问,数组索引从0开始

      获取数组长度:arrays.Lengthnums.length

    • 这个地方容易出现一个报错[原因是数组下表越界了]

      ```java.lang.ArrayIndexOutOfBoundsException``

  • 静态初始化:创建+赋值

    int []a={1,2,3,4,5,6,7,8};
    
  • 动态初始化:包含默认初始化

    int []b=new int[10];
    b[0]=10;
    b[1]=90;
    System.out.println(b[1]);
    System.out.println(b[2]);//默认值就是0
    
  • 创建过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HMS57m4U-1673864381593)(C:/Users/%E5%AD%99%E5%A5%A5/AppData/Roaming/Typora/typora-user-images/image-20230114194548190.png)]

  • 数组四个特点
    1. 数组长度确定,一旦确定无法更改
    2. 其元素必须是相同类型,不允许出现混合,不能有int 还有String
    3. 数组中元素可以使任何数据类型,包括基本类型和引用类型
    4. 数组变量属于引用类型,数组也可以看成是对象,数组中每个元素相当于该变量的成员变量.数组本身就是对象,java的对象在堆中,因此数组无论保存原始类型还是其他对象类型,数组对象本身在堆中的

数组的应用

  • 基础训练
package com.SunAo.array;
public class ArrayDemo03 {
    public static void main(String[] args) {
        int [] arrays={1,2,3,4,5,6};
        //打印全部的数组元素
        for (int i = 0; i <arrays.length; i++) {
            System.out.println(arrays[i]);
        }
        //计算所有元素的和
        int sum=0;
        System.out.println("======================");
        for (int i = 0; i < arrays.length; i++) {
            sum+=arrays[i];//sum=sum+arrays[i]
        }
        System.out.println("sum"+sum);
        //查找出元素的最大值
        int max=arrays[0];
        for (int i = 0; i <arrays.length; i++) {
            if(arrays[i]>max){
                max=arrays[i];
            }
        }
        System.out.println("max"+max);
    }
}
  • 高阶使用

    public class ArrayDemo04 {
        public static void main(String[] args) {
            int [] arrays={1,2,3,4,5,6};
                    //JDK1.5版本 没有下标
            for (int array : arrays) {
                System.out.println(array);
            }
        }
    }
    
    • 快捷输入 arrays.for生成for (int array : arrays)

      这种方便进行打印操作,但是单个数组操作就没那么方便,JDK1.5才开始有的

  • 练习使用

    package com.SunAo.array;
    
    public class ArrayDemo04 {
        public static void main(String[] args) {
            int [] arrays={1,2,3,4,5,6};
                    //JDK1.5版本 没有下标
           /* for (int array : arrays) {
                System.out.println(array);
            }*/
            printArrary(arrays);
            int[] reverse = reverse(arrays);
            printArrary(reverse);
        }
        //翻转数组
        public  static int[] reverse (int []arrays){
            int []result =new int[arrays.length];
            //反转操作
            for (int i = 0,j=result.length-1; i < arrays.length; i++,j--) {
                result[j]=arrays[i];
            }
            return result;
        }
        //打印数组元素
        public static void printArrary(int []arrary){
            for (int i = 0; i < arrary.length; i++) {
                System.out.print(arrary[i]+" ");
    
            }
        }
    }
    
    • 数组的反转
    • 打印操作

多维数组

  • 二维数组:数组嵌套数组

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zDgToh4a-1673864425891)(C:/Users/%E5%AD%99%E5%A5%A5/AppData/Roaming/Typora/typora-user-images/image-20230116144859514.png)]

  • 循环打印一个二维数组元素

    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array[i].length; j++) {
            System.out.println(array[i][j]);
        }
    }
    
  • 定义二维数组

    int [][]array ={{1,2},{2,5},{3,4},{4,5}};
    
  • 输出数组元素

    System.out.println(array[0][0]);//输出第一行第一列
    
  • 测试代码

    package com.SunAo.array;
    //[4][2]
                        /*1,2    array[0]
                          2,5    array[1]
                          3,4    array[2]
                          4,5    array[3]
                        */
    public class ArrayDemo05 {
        public static void main(String[] args) {
            int [][]array ={{1,2},{2,5},{3,4},{4,5}};
            //循环打印整个二维数组
            for (int i = 0; i < array.length; i++) {
                for (int j = 0; j < array[i].length; j++) {
                    System.out.println(array[i][j]);
                }
            }
    
            printArrary(array[0]);
            System.out.println();
            System.out.println(array[0][0]);
            System.out.println(array[1][0]);
                }
                //打印
        public static void printArrary(int []arrary){
            for (int i = 0; i < arrary.length; i++) {
                System.out.print(arrary[i]+" ");
            }
        }
    }
    

Arrays 类拓展

  • Arrays.下面有很多的工具类

    比如Arrays.toString打印 Arrays.sort(a)从小到大排序都是可以自己写出来的

    更多工具详情可以看下这位博主的
    jdk帮助文档详情及下载

    不要过度依赖工具类

    • 原来

      public static String toString(int[] a) {
          if (a == null)
              return "null";
          int iMax = a.length - 1;
          if (iMax == -1)
              return "[]";
      
          StringBuilder b = new StringBuilder();
          b.append('[');
          for (int i = 0; ; i++) {
              b.append(a[i]);
              if (i == iMax)
                  return b.append(']').toString();
              b.append(", ");
          }
      }
      
    • 我们写的

      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]+", ");
          }
          }
      }
      
    • 代码

      package com.SunAo.array;
      
      import java.util.Arrays;
      
      public class ArrayDemon06 {
          public static void main(String[] args) {
              int []a={1,2,3,5,9222,3111,54,2256,32,25};
              System.out.println(a);//[I@4554617c
              //打印数组元素
              System.out.println(Arrays.toString(a));
              System.out.println("=========================");
              printArray(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]+", ");
              }
              }
          }
      }
      
    • 打印对比

冒泡排序

//冒泡排序
//1.比较数组两个相邻的元素如果第一个第二个数大,就交换位置
//2.每次比较都会产生出一个最大或者最小的数值
//3.下一轮可以少一次比较
//4.依次循环直到结束
  • 冒泡排序java实现

    package com.SunAo.array;
    
    import java.util.Arrays;
    
    public class ArrayDemo07 {
        public static void main(String[] args) {
            int []a={10,8,5,6,2,52,144,256,445};
            int[] sort1 = sort(a);
            System.out.println(Arrays.toString(sort1));
        }
        //冒泡排序
        //1.比较数组两个相邻的元素如果第一个第二个数大,就交换位置
        //2.每次比较都会产生出一个最大或者最小的数值
        //3.下一轮可以少一次比较
        //4.依次循环直到结束
        public static int[] sort(int[]array){
            //循环判断要走多少次
            for (int i = 0; i < array.length-1; i++) {
                boolean flag =false;//通过falg标示位减少没有意义的比较
    
                //内层循环,比较判断两个数,第一个数比第二个数大则交换位置
                for (int j = 0; j < array.length-1-i; j++) {
                    if (array[j]>array[j+1]){
                        int temp=array[j];
                        array[j]=array[j+1];
                        array[j+1]=temp;
                        flag=true;
                    }
                    if(flag==false)
                    {
                        break;
                    }
                }
            }
            return array;
        }
    }
    
    • boolean做一个优化 进行判断,如果成功继续进行,如果失败则终止程序

稀疏数组

  • 稀疏数组代码

    • 实现了存放原始数组

      • 创建11x11的邻接矩阵对相应进行赋值

      • 实现如图效果

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYaUHFze-1673864472975)(C:/Users/%E5%AD%99%E5%A5%A5/AppData/Roaming/Typora/typora-user-images/image-20230116175322558.png)]

      int [][] a1=new int[11][11];//此时此刻形成了一个11x11的格子里面都放的是0
      a1[1][2]=1;
      a1[2][3]=2;
      System.out.println("输出原始数组");
      
      for (int[] ints : a1) {
          for (int anInt : ints) {
              System.out.print(anInt+"\t");
          }
          System.out.println();
      }
      
    • 将原始数组转化为稀疏数组

      • 首先输出有效个数以便于判断所要创建稀疏数组行数

      • 第一行分别是行 列 总数

      • 遍历二维数组a1 将非零值存放到稀疏数组a2

      • 代码

        System.out.println("有效值个数:"+sum);
        
        //创建一个稀疏数组的数组
        int [][] a2=new int[sum+1][3];
        a2[0][0]=11;//行
        a2[0][1]=11;//列
        a2[0][2]=sum;
        
        //遍历二维数组,将非零的值,存放到稀疏数组
        int count=0;
        for (int i = 0; i < a1.length; i++) {
            for (int j = 0; j < a1[i].length; j++) {
                if (a1[i][j]!=0){
                 count++;
                 a2[count][0]=i;
                 a2[count][1]=j;
                 a2[count][2]=a1[i][j];
                }
            }
        }
        //输出稀疏数组
        System.out.println("稀疏数组输出如下");
        for (int i = 0; i < a2.length; i++) {
            for (int j = 0; j < a2[i].length; j++) {
                System.out.print(a2[i][j]+"\t");
            }
            System.out.println();
        }
        
      • 最后输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnr379Ky-1673864563991)(C:/Users/%E5%AD%99%E5%A5%A5/AppData/Roaming/Typora/typora-user-images/image-20230116180210385.png)]

  • 将稀疏数组再次转化为原数组

    • 读取稀疏数组

    • 给其中元素还原它的值

    • 打印输出

    • 代码

      //1.读取稀疏数组
      int[][]a3=new int[a2[0][0]][a2[0][1]];
      //2.给其中元素还原它的值
      for (int i = 1; i < a2.length; i++) {
          a3[a2[i][0]][a2[i][1]] = a2[i][2];
      }
          //3.打印
          System.out.println("输出还原的数组");
          for (int[] ints : a3) {
              for (int anInt : ints) {
                  System.out.print(anInt+"\t");
              }
              System.out.println();
          }
      
    • 最后输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ANrQy76h-1673864613797)(C:/Users/%E5%AD%99%E5%A5%A5/AppData/Roaming/Typora/typora-user-images/image-20230116180210385.png)]

- 值得一提的是这个输出代码

  ```java
  for (int[] ints : a3) {
          for (int anInt : ints) {
              System.out.print(anInt+"\t");
          }
          System.out.println();
  ```

  > for (int[] ints : a3) {  
  >
  > }  
  >
  > ```快捷键 a3.for``
  >
  > for (int anInt : ints) {      
  >      }
  >
  > ```快捷键 ints.for```

完整代码

package com.SunAo.array;
import com.sun.javaws.IconUtil;
import java.util.Arrays;
import java.util.SortedMap;
public class ArrayDemo08 {
    public static void main(String[] args) {
        int [][] a1=new int[11][11];//此时此刻形成了一个11x11的格子里面都放的是0
        a1[1][2]=1;
        a1[2][3]=2;
        System.out.println("输出原始数组");

        for (int[] ints : a1) {
            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(a1[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("===========================");
        System.out.println("有效值个数:"+sum);

        //创建一个稀疏数组的数组
        int [][] a2=new int[sum+1][3];
        a2[0][0]=11;//行
        a2[0][1]=11;//列
        a2[0][2]=sum;
        //遍历二维数组,将非零的值,存放到稀疏数组
        int count=0;
        for (int i = 0; i < a1.length; i++) {
            for (int j = 0; j < a1[i].length; j++) {
                if (a1[i][j]!=0){
                 count++;
                 a2[count][0]=i;
                 a2[count][1]=j;
                 a2[count][2]=a1[i][j];
                }
            }
        }
        //输出稀疏数组
        System.out.println("稀疏数组输出如下");
        for (int i = 0; i < a2.length; i++) {
            for (int j = 0; j < a2[i].length; j++) {
                System.out.print(a2[i][j]+"\t");
            }
            System.out.println();
        }
        //1.读取稀疏数组
        int[][]a3=new int[a2[0][0]][a2[0][1]];
        //2.给其中元素还原它的值
        for (int i = 1; i < a2.length; i++) {
            a3[a2[i][0]][a2[i][1]] = a2[i][2];
        }
            //3.打印
            System.out.println("输出还原的数组");
            for (int[] ints : a3) {
                for (int anInt : ints) {
                    System.out.print(anInt+"\t");
                }
                System.out.println();
            }
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TypeScript 数据模型层编程的最佳实践

虽然 TypeScript 主要用于客户端&#xff0c;而数据模型的设计主要是服务端来做的。 但是要写出优雅的代码&#xff0c;也还是有不少讲究的。 让我们从一个简单的我的文章列表 api 返回的数据开始&#xff0c;返回的文章列表的信息如下&#xff1a; {"id": 2018,&qu…

原生PHP及thinkphp6接入阿里云短信

申请accesskey获取到Accesskey ID和Accesskey Secret保存下来&#xff0c;一会要用到添加测试手机号&#xff0c;在接口测试能否正常发送下载阿里云短信sdk&#xff0c;使用composer下载&#xff0c;没有安装请先安装安装可以安装到任意文件夹下&#xff0c;后面代码写好后&…

TDSQL的安装教程(低配体验)

一、了解TDSQL tdsql腾讯云文档 TDSQL-C MySQL 版&#xff08;TDSQL-C for MySQL&#xff09;是腾讯云自研的新一代云原生关系型数据库。融合了传统数据库、云计算与新硬件技术的优势&#xff0c;为用户提供具备极致弹性、高性能、海量存储、安全可靠的数据库服务。TDSQL-C My…

AtCoder Beginner Contest 285解题报告

A - Edge Checker 2 Problem Statement Determine if there is a segment that directly connects the points numbered a and b in the figure below. Constraints 1≤a<b≤15a and b are integers.Input The input is given from Standard Input in the following for…

用SpectorJS调试WebGL应用

随着使用 WebGL 构建的体验不断涌现&#xff0c;以及 WebVR/AR 领域的所有改进&#xff0c;拥有高效的调试工具变得至关重要。 无论你是刚刚起步还是已经是使用 WebGL 开发 3D 应用程序的经验丰富的开发人员&#xff0c;都可能知道工具对于生产力的重要性。 在寻找此类工具时&…

【开发环境】JRE 裁剪 ① ( 裁剪 bin 目录下的 dll 动态库文件 )

文章目录一、JRE 裁剪二、裁剪 bin 目录下的 dll 动态库文件参考博客 : 精简jre1.8精简jre步骤裁剪JRE(嵌入式设备的java环境移植) 资源下载地址 : https://download.csdn.net/download/han1202012/87388400 一、JRE 裁剪 在 【IntelliJ IDEA】使用 exe4j 生成 jre jar 可执…

华为MPLS跨域A、B方案实验配置

目录 MPLS域内配置 MPLS-AS100域内配置 MPLS-AS200域内配置 域间方式A配置 ASBR4和ASBR5配置实例 ASBR之间建立基于实例的EBGP邻居关系 域间方式B配置 ASBR相连接口开启MPLS ASBR之间建立MP-BGP的EBGP邻居 配置取消RT值检测 配置传递路由时更改下一跳为自身 MPLS域内…

程序员必知必会 QPS TPS、URI URL、PV UV GMV

一、QPS和 TPS QPS&#xff1a;Queries Per Second&#xff0c;意思是“每秒查询数”&#xff0c;是一台服务器每秒能够响应的查询次数&#xff0c;是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 即最大吞吐能力。 TPS&#xff1a;TransactionsPerSecond&…

springboot整合log4j2

导入依赖 <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency><!--log4j2--> <dependency><groupId>org.apache.logging.log4j</groupId>&…

Spring Boot(五十三):SpringBoot Actuator之实现

1 场景介绍 对于一个大型的几十个、几百个微服务构成的微服务架构系统&#xff0c;在线上时通常会遇到下面一些问题&#xff0c;比如&#xff1a; 1. 如何知道哪些服务除了问题&#xff0c;如何快速定位&#xff1f; (健康状况&#xff09; 2. 如何统一监控各个微服务的性能指标…

JAVA会员营销系统源码+数据库,实体店铺会员管理和营销系统源码,采用SpringBoot + Mysql+Mybatis

会员营销系统介绍 介绍 fuint会员营销系统是一套开源的实体店铺会员管理和营销系统。系统基于前后端分离的架构&#xff0c;后端采用Java SpringBoot Mysql&#xff0c;前端基于当前流行的Uniapp&#xff0c;Element UI&#xff0c;支持小程序、h5。主要功能包含电子优惠券、…

冰蝎V4.0流量分析到攻防检测

0x01 前言 最近在改写 yso&#xff0c;觉得自己基础太差了&#xff0c;想先阅读一下 sqlmap、冰蝎以及一些其他工具的开发思路。文章可能写的不够严谨&#xff0c;有不对的地方还请师傅们多多指出。 0x02 环境搭建 这里我看的是 MountCloud 师傅所二开的冰蝎项目&#xff0c…

【关于Linux中----进程间通信方式之system V共享内存】

文章目录一、共享内存示意图二、学习共享内存前的准备工作三、共享内存函数3.1创建共享内存&#xff1a;3.2控制共享内存&#xff1a;3.3挂接和去挂接&#xff1a;一、共享内存示意图 上一篇文章中讲述的是管道的通信方式&#xff0c;而这里要讲的是操作系统层面专门为进程间通…

编译原理-链接实例分析

gcc-arm-none-eabi 工具链功能1.arm-none-eabi-gcc &#xff1a;c语言编译器&#xff0c;可以将.c文件编译为.o的执行文件2.arm-none-eabi-g &#xff1a;c编译器&#xff0c;可以将.cpp文件编译成.o的执行文件3.arm-none-eabi-ld : 链接器&#xff0c;链接所有的.o文件生成可执…

CDH6.3生产环境中禁用Kerberos

在集群启用Kerberos后&#xff0c;会对现有环境的部分代码做改造&#xff0c;有些人觉得使用起来不方便&#xff0c;想取消Kerberos。本篇文章主要介绍如何禁用CDH集群的Kerberos及禁用后对各组件服务的测试。修改了网上相关文档的一些缺陷&#xff0c;在生产环境中实际使用过通…

GIT ---- GitHub配置SSH Key的完整步骤

1. 配置 SSH Key 由于提交代码每次输入用户名和密码&#xff0c;很繁琐&#xff0c;所以直接配置 SSH Key&#xff0c;直接自动验证&#xff0c;减少提交代码的操作步骤。 2. 查看配置命令 git config --list 查看当前Git环境所有配置&#xff0c;还可以配置一些命令别名之类…

这一年,熬过许多夜,也有些许收获 | 2022年度总结

弹指一挥间&#xff0c;时间如白驹过隙。光阴似箭&#xff0c;日月如梭&#xff0c;时间如闪电&#xff0c;转瞬即逝。回望来时路&#xff0c;不觉潸然泪下… 一说到年终总结&#xff0c;好像都离不开这样煽情的开场白。但不可否认的是&#xff0c;时间确实过得很快&#xff0…

学习记录661@项目管理之项目立项管理

什么是项目立项管理 项目立项管理关注的重点在于是否要启动一个项目&#xff0c;并为其提供相应的预算支持具体来说&#xff0c;项目立项管理包括以下 5 个典型环节&#xff0c;分别是 项目建议项目可行性分析项目审批项目招投标项目合同谈判与签订 需要说明的是&#xff0c…

两大技巧教你轻松应对IB数学

同学想要在IB数学科取得好成绩&#xff0c;可以从两个方面来着手。 1.复习技巧第一个是复习技巧。这方面&#xff0c;同学要清楚知道自己读的课程&#xff0c;它的教学大纲&#xff08;Syllabus&#xff09;要求是什么&#xff0c;还有它背后想要同学达到什么样的目标。 IB数学…

浅谈DNS解析

DNS介绍IP是计算机里的地址簿&#xff0c;但是IP是由一串数字组成&#xff0c;我们的大脑很难记住&#xff0c;所以就需要定义一个符合人类记忆规则的地址&#xff0c;而这就是我们现在常用的网站域名&#xff0c;域名就是我们和计算机作为地址沟通的桥梁&#xff0c; 虽然我们…