《疯狂Java讲义(第3版)》.(李刚)——数组

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();
        }

    }
}

这里写图片描述

数字中问演示和五子棋大家自行联系完成吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值