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

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

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

 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. Educational Codeforces Round 37 G. List Of Integers (二分,容斥定律,数论)

    G. List Of Integers time limit per test 5 seconds memory limit per test 256 megabytes input standard ...

  2. python+Appium自动化:H5元素定位

    问题思考 在混合开发的App中,经常会有内嵌的H5页面.那么这些H5页面元素该如何进行定位操作呢? 解决思路 针对这种场景直接使用前面所讲的方法来进行定位是行不通的,因为前面的都是基于Andriod原 ...

  3. jquery 去除 css 的 background-image 样式

    首先我使用了这个: $('#**').css('background-image', null); 没有效果...... 然后我用了这个: $('#staffName').css('backgroun ...

  4. html z-index

    如果你的悬浮的div被其他遮挡  那应该是遮挡的元素与它不是同级  可以考虑放在同一个父级目录下

  5. django缓存--缓存加数据库型

    4.缓存+数据库Session 数据库用于做持久化,缓存用于提高效率   a. 配置 settings.py       SESSION_ENGINE = 'django.contrib.sessio ...

  6. 多线程:Thread类的Join()方法

    多线程:Thread类的Join()方法 http://blog.163.com/hc_ranxu/blog/static/3672318220095284513678/ 当我们在线程B中调用Thre ...

  7. hdu 1133 卡特兰 高精度

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  8. 一次router拦截器的应用

    实现 退出登陆  无法回退到其它页面 当有登陆状态时  可以拿其它页面的地址直接访问 若没有登陆状态   拿其它页面的地址直接访问 会报错 router.beforeEach((to, from, n ...

  9. javascript原型继承

    在传统的基于Class的语言如Java.C++中,继承的本质是扩展一个已有的Class,并生成新的Subclass. 由于这类语言严格区分类和实例,继承实际上是类型的扩展.但是,JavaScript由 ...

  10. tomcat使用实践三种运行模式之apr

    tomcat有三种运行模式 nio,bio,apr bio是阻塞式IO操作,使用的是传统的java i/o处理方式,对于每一个请求都要创建一个线程来进行处理,所以开销较大不适合处理高并发的场景 nio ...