Java学习笔记 04、数组与Arrays工具类

举报
长路 发表于 2022/11/22 21:37:16 2022/11/22
【摘要】 文章目录前言一、一维数组基本认识内存空间二、二维数组基本认识三、工具类Arrays 前言       去年四月份大一下半学期正式开始学习Java,一路从java基础、数据库、jdbc、javaweb、ssm以及Springboot,其中也学习了一段时间数据结构。       在

@[toc]


前言

      去年四月份大一下半学期正式开始学习Java,一路从java基础、数据库、jdbc、javaweb、ssm以及Springboot,其中也学习了一段时间数据结构。

      在javaweb期间做了图书商城项目、ssm阶段做了权限管理项目,springboot学了之后手痒去b站看视频做了个个人博客项目(已部署到服务器,正在备案中)。期间也不断进行做笔记,总结,但是越学到后面越感觉有点虚,觉得自己基础还有欠缺。

      之后一段时间我会重新回顾java基础、学习一些设计模式,学习多线程并发之类,以及接触一些jvm的相关知识,越学到后面越会感觉到基础的重要性,之后也会以博客形式输出学习的内容。

      现在整理的java知识基础点是在之前学习尚硅谷java课程的笔记基础之上加工汇总,部分图片会引用尚硅谷或网络上搜集或自己画,在重新回顾的过程中也在不断进行查漏补缺,尽可能将之前困惑的点都解决,让自己更上一层楼吧。

      博客目录索引博客目录索引(持续更新)



一、一维数组

基本认识

数组是引用类型,其内容可以是基本数据类型也可以是引用数据类型

声明数组int[] ids; (内容为基本类型) String[] ids; (内容为引用类型)

  • 其中[]位置也可以不同,int[] idsint ids[] 都是允许的

初始化方式

  • 静态初始化:int[] ids = new []{1,2,3,4};ids = {1,2,3,4}; (类型推断)。简单来说就是直接赋予数组指定的值。
  • 动态初始化:String[] ids = new String[5]; 简单来说就是预留好指定类型的内存空间,之后可以进行赋值。

索引位置:在数组中是从0开始进行索引的

int[] ids1 = {1,2,3};
System.out.println(ids1[0]);//1

数组长度:可以使用数组名.length获取数组的长度

//静态初始化的数组按照其中静态初始化的个数计算
int[] ids1 = new int[]{1,2,3};
System.out.println(ids1.length);//3
//动态初始化的数组按照开辟的内存空间计算
int[] ids2 = new int[5];
System.out.println(ids2.length);//5

默认初始化数组说明:例如int[] ids = new int[5];

  • 基本数据类型(数组元素)

    • 整型:0

    • 浮点型:0.0

    • char型:0或’\u0000’ ,注意0不是’0’ 。其中’\u0000’ ,输出时看起来是一个空格,实际上是一个unicode字符

      char[] c = new char[5];
      for (char c1:c){
          System.out.print("1"+c1);
      }//结果为:1 1 1 1 1 
      
    • boolean:false

  • 引用数据类型:null



内存空间

image-20210124161944186

我们拿一个数组举例,如:int[] ids = new int[]{1,2,3,4};

其中new出来的数组内容会放在堆中,并且会分配一个内存地址。接着在栈中存放局部变量ids,并且给这个变量ids的值设置为堆中的内存地址,如下图:

image-20210124163035929

生存周期说明:当作用域结束时,例如main方法结束时,会先从栈中依次退出,然后堆中的内存空间进行释放。


实际案例

int[] ids = new int[]{1,2,3,4};
System.out.println(ids);//[I@677327b6     

就是一个内存空间地址,若是访问其中的元素通过访问其数组下标得到,例如ids[0]获取值为1。



二、二维数组

基本认识

二维数组:一个一维数组中的每个位置又包含了一个一维数组。

从数组底层的运行机制来看,实际上没有多维数组

声明二维数组int[][] idsint[] ids[]int ids[][]

初始化方式

  • 静态初始化:int[][] ids=new int[][]{{1,2,3},{4,2},{6,7,8}};int[][] ids={{1,2,3},{4,2},{6,7,8}}
  • 动态初始化:String[][] arr = new String[3][2];int[][] ids = new int[3][];

初始值:二维数组的初始值跟初始化也有点相关,见下面例子:

  • //动态初始化 第二个框明确开辟空间的话 就会开辟空间并设置默认值为0 其他基本类型默认赋值与之前一维数组值一样
    int[][] ids = new int[4][4];
    System.out.println(ids);//[[I@677327b6
    System.out.println(ids[0]);//[I@14ae5a5
    System.out.println(ids[0][0]);//0
    
    • image-20210124212638056
  • //注意这里第二框没有具体数字,此时java只会开辟前面的一维数组,后面的因不确定个数就不会给你开辟
    int[][] ids = new int[3][];
    System.out.println(ids);//[[I@677327b6
    System.out.println(ids[0]);//null
    System.out.println(ids[0][0]);//报错空指针,Exception in thread "main" java.lang.NullPointerException
    
    • image-20210124213439101

获取行列数:开辟多少空间就有多少个,就算其中一组一维数组有null还是包含在呢

int[][] ids = new int[3][4];
//求二维数组中x组一维数组
System.out.println(ids.length);//3
//求二维数组中第1组一维数组有多大长度
System.out.println(ids[0].length);//4


三、工具类Arrays

Arrays是java.util包下的一个操作数组的工具类,包含了用来操作数组(如排序与搜索)的各种方法。

列举几个常用的方法:

  • boolean equals(int[] a,int[] b):判断两个数组是否相等
  • String toString(int[] a):字符串形式输出数组信息
  • void fill(int[] a,int val):将指定值填充到数组中
  • void sort(int[] a):对数组进行升序排序
  • int binarySearch(int[] a,int key):对排序后的数组进行二分法检索指定的值

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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