JavaSE第三十三讲:Java数组常见问题深度解析
来源:互联网 发布:mysql数据库下载 编辑:程序博客网 时间:2024/06/05 14:43
针对上一讲内容的引用类型数组,这里再做一次剖析,回顾上一个程序:
Person[] p = new Person[3];p[0] = new Person(10);p[1] = new Person(20);p[2] = new Person(30);
【说明】:在这一个程序中数组里面存放的只是指向Person对象的引用,也就是存放的只是一个指向各自对象的地址而已,这里不要搞混掉,如下图33-1所示:
图33-1
举一个例子,利用数组输出数组奇数下标的数组内容为zhangsan,偶数下标的数组内容为lisi。
public class ArrayTest3{public static void main(String[] args) {Student[] s = new Student[100];for(int i = 0; i < s.length; i++){s[i] = new Student();if(i % 2 == 0){s[i].name = "zhangsan";}else{s[i].name = "lisi";}System.out.println(s[i].name);}}}class Student{String name;}【说明】:其中判断数组下标代码段可以用三元运算来实现更加简单。
/*if(i % 2 == 0){s[i].name = "zhangsan";}else{s[i].name = "lisi";}*/s[i].name = i % 2 == 0 ? "zhangsan" : "lisi";
1. 二维数组。二维数组是一种平面的二维结构,本质上是数组的数组。二维数组的定义方 式:
type[ ][ ] a = new type[2][3];
之前定义的是一维数组,体现的是线性结构,现在定义的是二维数组,体现的是平面的结构
public class ArrayTest4{public static void main(String[] args) {int[][] a = new int[2][3];System.out.println(a instanceof Object);System.out.println(a[0] instanceof int[]);}}
编译执行结果:
D:\src>java ArrayTest4
true
true
【说明】:System.out.println(a instanceof Object);验证数组是一个对象,输出为true。System.out.println(a[0] instanceof int[ ]);验证a[ 0]是一个一维的数组,表示数组的行,输出为真。
i[0][0] = 1; 给数组第一行第一列赋值为1;
继续修改程序,并给数组赋值,按以下图所示:
图33-2
public class ArrayTest4{public static void main(String[] args) {int[][] a = new int[2][3];int m = 0;for(int i = 0; i < 2; i++){for(int j = 0; j < 3; j++){m++;a[i][j] = m * 2;System.out.println(a[i][j]);}}}}编译执行结果:
D:\src>java ArrayTest4
2
4
6
8
10
12
定义如下图所示的不规则的数组:
图33-3
public class ArrayTest5{public static void main(String[] args) {int[][] a = new int[3][];a[0] = new int[2];a[1] = new int[3];a[2] = new int[1];}}
【说明】:其中a[0]是第一行,此处表示的是一维数组类型的,再嵌套一个列。这是定义不规整数组的方式。
【注意】:int[][] a = new int[3][];不能换写为按列来int[][] a = new int[][3];原因如下如果先定义列的话不知道行数有多少,所以没办法初始化数组,而定义不规整数组时,初始化信息一般从行开始的。
定义一唯数组时可以这样写:int[] a = new int[]{1, 2, 3};
那定义二维数组时也可以这样写:int[][] a = new int[][]{ {1, 2, 3}, {4}, {5, 6, 7, 8} };注意这里面大括号里面的每个大括号表示一行,大括号之间用逗号隔开。具体如下图33-4所示:
图33-4
现在写一个程序将上述数组里面的值打印出来:
int[][] a = new int[][]{ {1, 2, 3}, {4}, {5, 6, 7, 8} };for(int i = 0; i < a.length; i++){for(int j = 0; j< a[i].length; j++){System.out.print(a[i][j] + " ");}System.out.println();}编译执行结果:
D:\src>java ArrayTest5
1 2 3
4
5 6 7 8
【注意】:其中System.out.print();表示输出的时候不换行。这个程序是对所有不规整数组输出内容的通用程序,用这个程序可以打印出所有不规整的数组,其中二维数组的长度length表示二维数组的行数,这个程序先确定有多少行,用length来确定,再从每个一维数组中确定有多少列。
- JavaSE第三十三讲:Java数组常见问题深度解析
- JavaSE第十三讲:Java基础知识回顾 续
- 第三十三讲 初窥LINQ
- Java基础:第三十三讲 父类与继承
- JavaSE第三十讲:String类陷阱深度剖析
- 第三十三讲|三种循环
- 第三十一篇:JAVA解析HTML
- JavaSE第一百零三讲:wait及notify方法全名、深度剖析
- 韩顺平网页设计第三十三讲
- 第三十三讲 项目 三种循环语句
- 第三十三讲项目1-利用循环求和
- 第三十三讲项目2-求阶乘
- 第三十三讲项目二 求阶乘
- 第三十三讲项目四 多数中的最大
- JavaSE第三十二讲:Java数组内存地址解析
- JavaSE第七十三讲:异常详解
- java 泛型数组 深度解析
- JavaSE第七十五讲:异常笔试、面试常见问题深度剖析
- POJ 3628 Bookshelf 2
- CEGUI 中文按钮
- sqlite3在ARM上的移植
- OpenGL织梦之旅【第二章】第2节.实现动画
- WDK介绍与安装
- JavaSE第三十三讲:Java数组常见问题深度解析
- Hibernate4入门到精通一——————第一个Hibernate程序
- Android root 有感
- optics算法
- IPV4 与IPV6 头部结构与其区别
- 对比基于boost::function/bind和AS3 Function回调机制
- 第二十四节 java学习 包
- ASP.NET 安全认证(二)
- 判断一个数是2的幂数的最快方法!