Java基础复习之:数组

简介

数组(Array):多个相同数据类型按照一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理

一维数组

一维数组的声明与初始化

  1. int[] ids; //声明
  2. ids[] = new int[]{1,2,3,4} //初始化

静态初始化

声明和初始化可同时进行

  1. int[] ids = new int[]{1,2,3,4}

动态初始化

数组的初始化和数组元素的赋值操作分开进行

  1. String[] names = new String[5]; // length = 5
  2. names[0] = "旅鸟"
  3. names[1] = "Birdy";
  4. ...
  5. names[4] = "James"; //最大下标为4
  • 只能一个个赋值,多维数组也一样
  • 数组的下标从0开始,最大为length-1

常见错误方式

  1. int[] arr1 = new int[]; //没有声明数组长度或没有赋值
  2. int[5] arr2 = new int[5]; //声明数组名时[]应该是空的
  3. int[] arr3 = new int[3]{1,2,3}; //四不像,若是静态初始化就不用声明数组长度, 若是动态初始化就不能直接赋值

需要注意

  • 静态初始化有长度,无数值;动态初始化有数值,无长度
  • 一旦初始化完成数组长度就确定了
  • 数组的下标从0开始,最大为length-1

一维数组元素的引用

通过角标方式调用

  1. String[] names = new String[5]; // length = 5
  2. names[0] = "王铭";
  3. names[1] = "王赫";
  4. names[2] = "张学良";
  5. names[3] = "孙居龙";
  6. names[4] = "王宏志";

数组的属性

数组的长度length

调用方式:数组名.length

  1. System.out.println(names.length); //5

一维数组的遍历

普通方式

  1. int[] arr = new int[]{1,2,3,4,5};
  2. for (int i = 0; i < arr.length; i++){
  3. System.out.print(i);
  4. }
  5. //结果:12345

foreach

在遍历数组时,使用foreach语句更简单。

语法:元素类型 局部变量: 数组名

  1. int[] arr = new int[]{1,2,3,4,5};
  2. for (int i: arr) {
  3. System.out.print(i);
  4. }
  5. //结果:12345

Arrays工具类中toString静态方法遍历

public static String toString(int[] a),该方法有其他重载方法,用于其他数组类型

利用Arrays工具类中的toString静态方法可以将一维数组转化为字符串形式并输出

  1. int[] arr = new int[]{1,2,3,4,5};
  2. System.out.println(Arrays.toString(arr));
  3. //结果:[1, 2, 3, 4, 5]

Lambda 表达式遍历(JDK 1.8)

  1. Integer[] arr = new Integer[]{1,2,3,4,5}; //需要是包装类型
  2. Arrays.asList(arr).forEach(item -> System.out.println(item));
  3. //结果:123456

数组元素的默认初始化值

  • 数组元素是整形:0
  • 浮点型:0.0
  • char:'\u0000',表现为空格,实际不是空格
  • boolean:false
  • 引用数据类型:null

内存解析

局部变量都放在栈中,new出来的空间都在堆中

二维数组

如何理解二维数组

数组属于引用数据类型,数组的元素也可以是引用数据类型

一个一维数组A的元素如果还是一个一维数组类型的,则此数组A称为二维数组。

二维数组的声明与初始化

静态初始化

数据类型 [ ][ ] 数组名 = {{元素1,元素2....},{元素1,元素2....},{元素1,元素2....}.....};

  1. int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}}
  2. //也是正确的写法:
  3. int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
  4. int arr5[][] = {{1,2,3},{4,5},{6,7,8}}; //类型推断,若声明和初始化分开则不能这样简写

动态初始化

  • 数据类型[][] 变量名=new 数据类型[m][n];

    m表示这个二维数组有多少个数组

    n表示每一个一维数组的元素个数
  1. /*
  2. 定义了一个二维数组arr
  3. 这个二维数组有3个一维数组,名称是ar[0],arr[1],arr[2]
  4. 每个一维数组有2个元素,可以通过arr[m][n]来获取
  5. */
  6. String[][] arr = new String[3][2];
  • 数据类型[][] 变量名=new 数据类型[m][];

    m表示这个二维数组有多少个数组

    这一次没有直接给出一维数组的元素个数,可以动态的给出
  1. int[][] arr=new int[3][];
  2. arr[0] = new int[2];
  3. arr[1]= new int[3];
  4. arr[2]=new int[1];

如何调用二维数组元素

  • 数组名[m][n]:取一维数组中的元素
  • 数组名[m][]:取一维数组
  1. int arr1[][] = new int[][]{{1},{2,3},{4,5,6}};
  2. System.out.println(arr1[0]); //[Ljava.lang.Integer;@1540e19d 地址
  3. System.out.println(arr1[1][0]); //2

二维数组的遍历

普通for循环

  1. int arr[][] = new int[][]{{1},{2,3},{4,5,6}};
  2. //for循环遍历二维数组。
  3. for(int i = 0; i < arr.length; i++){
  4. for(int j = 0; j < arr[i].length; j++){
  5. System.out.print(arr[i][j]);
  6. }
  7. System.out.println();
  8. }
  9. /*
  10. 结果:
  11. 1
  12. 23
  13. 456
  14. */

增强for循环

  1. int arr[][] = new int[][]{{1},{2,3},{4,5,6}};
  2. for (int x[]: arr) {
  3. for (int a: x) {
  4. System.out.print(a);
  5. }
  6. System.out.println();
  7. }
  8. /*
  9. 结果:
  10. 1
  11. 23
  12. 456
  13. */

Arrays工具类中toString静态方法遍历

  1. int arr[][] = new int[][]{{1},{2,3},{4,5,6}};
  2. for(int i = 0; i < arr.length; i++){//循环得到一维数组
  3. System.out.println(Arrays.toString(arr[i]));//将一维数组转化为字符串输出
  4. }
  5. /*
  6. [1]
  7. [2, 3]
  8. [4, 5, 6]
  9. */

Lambda 表达式遍历(JDK 1.8)

  1. Integer arr[][] = new Integer[][]{{1},{2,3},{4,5,6}};
  2. Arrays.asList(arr).forEach(item -> {
  3. for (int i: item) {
  4. System.out.print(i);
  5. }
  6. System.out.println();
  7. });
  8. /*
  9. 1
  10. 23
  11. 456
  12. */

二维数组元素的默认初始化值

二维数组分为外层数组元素,内层数组里的元素

  • 外层元素的初始化值为:地址值
  • 内层元素的初始化值为:取决于数据类型,与一维数组相同
  1. //针对于初始化方式一:比如:int[][] arr = new int[4][3];
  2. Integer arr[][] = new Integer[][]{{1},{2,3},{4,5,6}};
  3. //外层元素:arr[0]:地址,arr[1]:地址
  4. //内层元素:arr[0][0]:1,arr[1][1]:3
  1. //针对于初始化方式二:
  2. int[][] arr = new int[4][];
  3. //外层元素的初始化值:null
  4. //内层元素的初始化值:不能调用,否则报错。

二维数组内存解析

数组的优势与局限(待更新)

Arrays工具类

需要操作数组元素时,优先查看工具类中的方法,例如转成List集合类型、排序、二分法查找、判断是否相等,填充啊等常见功能在工具类中都有,不需要自己写,位置在java.util.Arrays

多看API文档,没错滴

Java基础复习之数组的更多相关文章

  1. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  2. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  3. 《Java基础复习》-控制执行流程

    最近任务太多了,肝哭我了,boom 参考书目:Thinking in Java <Java基础复习>-控制执行流程 Java使用了C的所有流程控制语句 涉及关键字:if-else.whil ...

  4. 《Java基础复习》—常识与入门

    突然发现自己Java基础的底子不到位,复习! 所记知识会发布在CSDN与博客网站jirath.cn <Java基础复习>-常识与入门 一.Java语言的知识体系图 分为三部分 编程语言核心 ...

  5. java基础复习记录

    java基础复习记录(数组.对象.异常) 数组 数组的定义 数组是相同类型数据的有序集合.如:篮球队就是一个数组,队员球服上有号码,相当于索引.通过某一个的某一个号码来确认是某一个队员.数组中索引从0 ...

  6. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  7. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  8. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  9. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

随机推荐

  1. ubuntu系统执行生成密匙命令后,home目录下面没有生成.ssh目录

    ubuntu系统配置git ssh时,执行:ssh-keygen -trsa -C "youremail@example.com",home目录下面没有生成.ssh目录. .ssh ...

  2. Python中Tk模块简单窗口设计

    Python中Tk和PyQt都可以设计小程序,区别在于:Tk界面美观度相对较差,但由于是Python的内置模块,最终生成的程序大小相比于PyQt较小. import tkinter # 导入TKint ...

  3. 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)部分题解

    前言 找大佬嫖到个号来划水打比赛了,有的题没写或者不是我写的就不放了. 目前只有:1004,1005,1007,1008,1011 正题 题目链接:https://acm.hdu.edu.cn/con ...

  4. C# WPF MVVM项目实战(进阶②)

    这篇文章还是在之前用Caliburn.Micro搭建好的框架上继续做的开发,今天主要是增加了一个用户窗体ImageProcessView,然后通过Treeview切换选择项之后在界面显示不同效果的图片 ...

  5. Java 爬取 51job 数据 WebMagic实现

    Java 爬取 51job 数据 一.项目Maven环境配置 相关依赖 jar 包配置 <parent> <groupId>org.springframework.boot&l ...

  6. NOIP 模拟四 考试总结

    #T1随 又是liu_................... 数列n,m个操作,每次随机取a[i],x=x*a[i]%k; 问题是求x期望%mod; 首先考虑到期望转移过程中存在%k,一般套路线性期望 ...

  7. 11204备库升级PSU

    某系统PSU为11.2.0.4.190115,备库打补丁20年10月份(31537677)由readme可知:1.要求OPatch要求为11.2.0.3.23或之后的版本.2.非rac环境打补丁需要关 ...

  8. 1.JDBC编程六步走以及实现案例

    1.注册驱动:通知Java程序我们要连接的是哪个品牌的数据库 2.获取数据库连接:Java进程和Mysql进程之间的通道开启了 3.获取数据库操作对象:这个对象是用来执行sql语句的 4.执行SQL语 ...

  9. 洛谷3163 CQOI2014危桥 (最大流)

    一开始想了一发费用流做法然后直接出负环了 首先,比较显然的思路就是对于原图中没有限制的边,对应的流量就是\(inf\),如果是危桥,那么流量就应该是\(2\). 由于存在两个起始点,我们考虑直接\(s ...

  10. Kali Linux修改root密码

    今天在官网下载了一个Kali虚拟机的压缩包, 解压缩后直接在VM中打开,点了好多次打开发现都打不开,查了一下说是没有关闭共享虚拟机,于是操作了一番: 编辑→首选项→共享虚拟机→选择禁用. 操作完之后果 ...