我们对数组的基本看法是,你可以创建它们,通过使用整型索引值访问它们的元素,并且他们的尺寸不能改变。

但是有时候我们需要评估,到底是使用数组还是更加灵活的工具。数组是一个简单的线性序列,这使得元素访问非常快速。但是为这种速度所付出的代价是数组大小被固定,并且在其生命周期中不可改变。

无论使用哪种类型的数组,数组标识符只是一个引用。基本类型数组直接保存基本类型的值,对象数组保存一个指向其他对象的引用。

 class Apple {
private static int count = 1; public Apple() {
System.out.println("Apple" + count++);
}
} public class ArrayOptions {
public static void main(String[] args) {
Apple[] a; // 创建一个Apple类型的数组引用
Apple[] b = new Apple[5]; // 创建一个Apple类型的数组对象,但是都指向null
System.out.println("b: " + Arrays.toString(b)); // b: [null, null, null, null, null]
Apple[] c = new Apple[4];
for (int i = 0; i < c.length; i++)
c[i] = new Apple(); // Apple1 Apple2 Apple3 Apple4
// Aggregate initialization:
Apple[] d = {new Apple(), new Apple(), new Apple()}; // Apple5 Apple6 Apple7
// Dynamic aggregate initialization:
a = new Apple[]{new Apple(), new Apple()}; // Apple8 Apple9
System.out.println("a.length = " + a.length); // a.length = 2
System.out.println("b.length = " + b.length); // b.length = 5
System.out.println("c.length = " + c.length); // c.length = 4
System.out.println("d.length = " + d.length); // d.length = 3
a = d;
System.out.println("a.length = " + a.length); // a.length = 3 int[] e; // 创建一个基本类型的数组引用
int[] f = new int[5]; // 创建一个Apple基本数组对象,初始化值都为0
System.out.println("f: " + Arrays.toString(f)); // f: [0, 0, 0, 0, 0]
int[] g = new int[4];
for (int i = 0; i < g.length; i++)
g[i] = i * i;
int[] h = {11, 47, 93};
System.out.println("f.length = " + f.length); // f.length = 5
System.out.println("g.length = " + g.length); // g.length = 4
System.out.println("h.length = " + h.length); // h.length = 3
e = h;
System.out.println("e.length = " + e.length); // e.length = 3
e = new int[]{1, 2};
System.out.println("e.length = " + e.length); // e.length = 2
}
}

多维数组

 import java.util.Arrays;

 class Apple {
private static int count = 1; public String toString() {
return "Apple" + count++;
}
} public class MutiArray {
public static void main(String[] args) {
// (1) 使用Arrays.deepToString()可以打印多维数组
int[][] a = {{1, 2, 3}, {4, 5, 6}};
long[][][] b = new long[2][2][3];
System.out.println(Arrays.deepToString(a)); // [[1, 2, 3], [4, 5, 6]]
System.out.println(Arrays.deepToString(b)); // [[[0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0]]] // (2) 多维数组值的设定可以用下面方法,并且数组中构成矩阵的每个向量都可具有任意长度(粗糙数组)
int[][] c = new int[3][];
for (int i = 0; i < c.length; i++) {
c[i] = new int[i + 1];
for (int j = 0; j < c[i].length; j++) {
c[i][j] = j + 1;
}
}
System.out.println(Arrays.deepToString(c)); // [[1], [1, 2], [1, 2, 3]] // (3) 用类似方式还可以处理非基本类型的(包装类和对象类)数组
Apple[][] d = {{new Apple(), new Apple()}, {new Apple(), new Apple(), new Apple()}};
Integer[][] e = {{1, 2}, {3, 4, 5}, {6, 7}};
System.out.println(Arrays.deepToString(d)); // [[Apple1, Apple2], [Apple3, Apple4, Apple5]]
System.out.println(Arrays.deepToString(e)); // [[1, 2], [3, 4, 5], [6, 7]]
}
}

Java数组(1):数组与多维数组的更多相关文章

  1. 06-01 Java 二维数组格式、二维数组内存图解、二维数组操作

    二维数组格式1 /* 二维数组:就是元素为一维数组的一个数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的 ...

  2. java基础-引用数据类型之二维数组(Array)

    java基础-引用数据类型之二维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我们学习过了Java的一维数组,所谓的二维数组就是元素是一堆一维数组的数组,换 ...

  3. Java 数组(三)二维数组

    如果一维数组的各个元素仍然是一个数组,那么它就是一个二维数组.二维数组常用于表示表,表中的信息以行和列的形式组织,第一个下标代表元素所在的行,第二个下标代表所在的列. 一.二维数组的创建 1.先声明, ...

  4. Android 在资源文件(res/strings.xml)定义一维数组,间接定义二维数组

    经常我们会在资源文件(res/strings.xml)定义字符串,一维数组,那定义二维数组?直接定义二维数组没找到,可以间接定义. 其实很简单,看过用过一次就可以记住了,一维数组估计大家经常用到,但是 ...

  5. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  6. php 将一个或多个二维数组组合成一个二维数组并根据某个字段排序排序

    最近再写项目的时候,碰到一个问题:如何将一个或多个二维数组组合成一个二维数组并根据某个字段排序排序:实在是想不到哪个php库中有哪个函数能实现,只能自己写一个了,将代码写出来后,发现自己的代码繁琐,并 ...

  7. C 二维数组,以及自定义二维数组

    C 二维数组,以及自定义二维数组 我们通常情况下是这样定义一个二维数组的: int a[10][15]; 我们分别查看一下a,a[0],*a 都是一样的值吧 我们可以这么理解: a是一个数组的数组 a ...

  8. 《java入门第一季》二维数组三个案例详解

    案例一:遍历二维数组 /* 需求:二维数组遍历 外循环控制的是二维数组的长度,其实就是一维数组的个数行数. 内循环控制的是一维数组的长度,每一行,一维数组元素分别的个数. */ class Array ...

  9. 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  10. Java使用Array类创建多维数组

    1.创建一维数组 import java.lang.reflect.Array; public class ArrayTest { public static void main(String[] a ...

随机推荐

  1. Some ML Tutorials

    VAE: What-is-variational-autoencoder-vae-tutorial Variational-autoencoders-explained Building variat ...

  2. Atcoder Educational DP Contest 题解

    A - Frog 1/B - Frog 2 入门... #include<cstdio> #define abs(a) ((a)>=0?(a):(-(a))) #define min ...

  3. Sleep-Join方法理解

    package cn.mayday.test; public class JoinTest { public static void main(String[] args) { try { int c ...

  4. P1052 过河 题解

    复习dp(迪皮)的时候刷到了一道简单路径压缩的题目(一点不会qwq) 题目描述链接. 正解: 首先呢,我们看到题目,自然而然的会想到这种思路: 设状态变量dp[i]表示从第一个格子开始经过一些跳跃跳到 ...

  5. DTcmsV4.0分析学习——(3)URL重写

    3.URL重写 3.1 控制流程 通过IHttpModule控制所有页面请求,具体流程如下 (1)真实路径可正常访问 (2)前台页面通过URL重写映射aspx目录,后台页面通过URL重写映射admin ...

  6. SDL 小例子

    以下利用SDL播放网络流,需要自己配置运行环境,包括SDL和FFmpeg // ConsoleApplication2.cpp : 定义控制台应用程序的入口点. // /* #include &quo ...

  7. 最小安装的centos7下安装oracle 12c

    下载 oracal 安装包 进入https://www.oracle.com/index.html  依次选择-->Menu -->Downloads and trials -->D ...

  8. Java进阶知识08 Hibernate多对一单向关联(Annotation+XML实现)

    1.Annotation 注解版 1.1.在多的一方加外键 1.2.创建Customer类和Order类 package com.shore.model; import javax.persisten ...

  9. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) C 倒序并查集

    C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...

  10. [Luogu] 选择客栈

    https://www.luogu.org/problemnew/show/P1311 思路就是,从1到n枚举,输入color和price的值,我们需要记录一个距离第二个客栈最近的咖啡厅价钱合理的客栈 ...