1、数组
1)简介:数组也是一种数据类型,它本身是一种引用类型。一旦数组初始化完成数组所占用的空间将被固定下来,因此数组的长度不可变。即使数组清空,它所占的空间依然保留,属于该数组。数组既可以存储基本数据类型也可以存储引用类型,只要所有数组元素具有相同类型即可。
2)定义数组:
[1]方式1(推荐,更能表明数组类型)
类型 [] 变量名 = new 类型 [数组中元素的个数];
比如:
int[] a = new int[10];
数组名,也即引用a,指向数组元素的首地址。
[2]方式2(同C语言)
类型 变量名[] = new 类型 [数组中元素的个数];
如:
int a[] = new int[10];
[3]方式3定义时直接初始化
类型 [] 变量名 = new 类型 []{逗号分隔的初始化值};
其中红色部分可省略,所以又有两种:
int[] a = {1,2,3,4};
int[] a = new int[]{1,2,3,4};
其中int[] a = new int[]{1,2,3,4};的第二个方括号中不能加上数组长度,因为元素个数是由后面花括号的内容决定的。
3)数组运用基础
[1]数组长度
Java中的每个数组都有一个名为length的属性,表示数组的长度。
length属性是public final int的,即length是只读的。数组长度一旦确定,就不能改变大小。
[2]数组比较
自定义数据equals
package com.alex.demo04;
import java.util.Arrays;
/** * Description <br> * 网站:<a href= "http://blog.csdn.net/qq_32347977">Alex的博客</a> * <br> * <br> * <br> * <br> * * @author Alex * @version 1.0 */
public class ArrayEqualsTest {
/** * 比较俩个数据 * @param a * @param b * @return */
public static boolean isEquals(int[] a, int[] b)
{
if( a == null || b == null )
{
return false;
}
if(a.length != b.length)
{
return false;
}
for(int i = 0; i < a.length; ++i )
{
if(a[i] != b[i])
{
return false;
}
}
return true;
}
/** * 主方法,程序的入口 * * @param args */
public static void main(String[] args)
{
//静态初始化
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(isEquals(a,b));
System.out.println(Arrays.equals(a,b));
}
}
[3]非基本数据类型数组
package com.alex.demo04;
/** * Description <br> * 网站:<a href= "http://blog.csdn.net/qq_32347977">Alex的博客</a> * <br> * <br> * <br> * <br> * * @author Alex * @version 1.0 */
public class ArrayTest2 {
/** * 主方法,程序的入口 * * @param args */
public static void main(String[] args)
{
//动态初始化
Person[] p = new Person[3];
//未生成对象时,引用类型均为空
System.out.println(p[0]);
//生成对象之后,引用指向对象
p[0] = new Person(10);
p[1] = new Person(20);
p[2] = new Person(30);
for(int i = 0; i < p.length; i++)
{
System.out.println(p[i].age);
}
}
}
class Person
{
int age;
public Person(int age)
{
this.age = age;
}
}
输出结果:
3)二维数组
[1]基本的定义方式有两种形式,如:
类型 [][] i = new 类型[2][3];(推荐)
类型 i[][] = new 类型[2][3];
package com.alex.demo04;
/** * Description <br> * 网站:<a href= "http://blog.csdn.net/qq_32347977">Alex的博客</a> * <br> * * @author Alex * @version 1.0 */
public class ArrayTest3 {
/** * 主方法,程序的入口 * * @param args */
public static void main(String[] args)
{
int[][] i = new int[2][3];
System.out.println("Is i an Object? "
+ (i instanceof Object));
System.out.println("Is i[0] an int[]? "
+ (i[0] instanceof int[]));
}
}
[2]变长的二维数组
二维数组的每个元素都是一个一维数组,这些数组不一定都是等长的。声明二维数组的时候可以只指定第一维大小,空缺出第二维大小,之后再指定不同长度的数组。但是注意,第一维大小不能空缺(不能只指定列数不指定行数)。
package com.alex.demo04;
/** * Description <br> * 网站:<a href= "http://blog.csdn.net/qq_32347977">Alex的博客</a> * * @author Alex * @version 1.0 */
public class ArrayTest4 {
/** * 主方法,程序的入口 * * @param args */
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];
//Error: 不能空缺第一维大小
//int[][] b = new int[][3];
}
}
二维数组也可以在定义的时候初始化,使用花括号的嵌套完成,这时候不指定两个维数的大小,并且根据初始化值的个数不同,可以生成不同长度的数组元素。
package com.alex.demo04;
/** * Description <br> * 网站:<a href= "http://blog.csdn.net/qq_32347977">Alex的博客</a> * * @author Alex * @version 1.0 */
public class ArrayTest5 {
/** * 主方法,程序的入口 * * @param args */
public static void main(String[] args)
{
int[][] c = new int[][]{{1, 2, 3},{4},{5, 6, 7, 8}};
for(int i = 0; i < c.length; ++i)
{
for(int j = 0; j < c[i].length; ++j)
{
System.out.print(c[i][j]+" ");
}
System.out.println();
}
}
}
数字中问演示和五子棋大家自行联系完成吧!