JAVA的基本程序设计结构(六)

本文详细介绍了Java中的数组,包括如何声明、初始化、访问数组元素,以及如何使用foreach循环和排序数组。此外,还提到了多维数组的使用和命令行参数的处理。特别强调了Java数组的动态特性以及其作为一维数组的实现方式。
摘要由CSDN通过智能技术生成

数组

数组存储相同类型值的序列。

声明数组

数组是一种数据结构,用来存储同一类型的集合。通过一个整型下标可以访问数组中的每一个值。

例如:如果a是一个整型数组,a[i]就是数组中下标为i的整数。

在声明数组变量时,需要指出数组类型(数据元素类型紧跟 [ ])和数组变量的名字。

下面声明了整型数组a: int [ ] a;

不过,这条语句只声明了变量a,并没有将a初始化为一个真正的数组。应该使用new操作符创建数组。

int [ ] a=new int[100]; 这条语句声明并初始化了一个可以存储100个整数的数组。

数组长度不要求是常量;new int [n] 会创建一个长度为n的数组。

一旦创建了数组,就不能再改变它的长度(不过,当然可以改变单个的数组元素)。如果程序运行中需要经常扩展数组的大小,就应该使用另一种数据结构——数组列表(array list)。

在Java中,提供了一种创建数组对象并同时提供初始值的简写形式。

例如:int [ ] age={12,l7,14,15,28};

请注意,这个语法中不需要使用new,甚至不用指定长度。

最后一个值后面允许有逗号,如果你要不断为数组增加值,这会很方便。

字符串数组:String [ ] name={"LiMing","ZhangSan","James"};

还可以声明一个匿名数组:new int [ ] {17,13,23,45,28}

这会分配一个新数组并填入大括号中提供的值。它会统计初始值个数,并相应地设置数组大小。可以使用这种语法重新初始化一个数组而无需创建新变量。

例如:age=new int [ ] {14,13,23,45,26};

这是下列语句的简写形式:

int [ ] a={14,13,23,45,26,15};

age=a;

访问数组元素

前面的数组元素的下标为从0~99(不是1~100)。一旦创建了数组,就可以在数组中填入元素。

例如使用一个循环:

int [ ] a=new int[100]; 

for (int i=0;i<100;i++)

a[i]=i;

创建一个数字数组时,所有元素都初始化为0。boolean数组的元素会初始化为false。对象数组的元素则初始化为一个特殊值null,表示这些元素(还)未存放任何对象。

例如:String names=new String[10];

上述数组会创建一个包含10个字符串的数组,所有字符串都为null。如果希望这个数组包含空串,必须为元素指定空串。

for (int i=0;i<100;i++) names[i]="";

要想获得数组中的元素个数,可以使用array.length。

for (int i=0;i<a.length;i++)

System.out.println(a[i]);

for each循环

Java有一种功能很强的循环结构,可以用来依次处理数组(或者其他元素集合)中的每个元素,而不必考虑指定下标值。

这种增强的for循环的语句格式为:

for (variable:collection) statement

它定义一个变量用于暂存集合中的每一个元素,并执行相应的语句(也可以是语句块)。collection这一集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象(例如ArrayList)。

例如:for(int element : a)

System.out.println(element);

打印数组a的每一个元素,一个元素占一行。这个循环应该读作“循环a中的每一个元素”(for each element in a)。

使用传统的for循环也可以获得同样的效果:

for (int i=0;i<a.length;i++)

System.out.println(a[i]);

但是,for each 循环语句显得更加简洁、更不容易出错,因为你不必为下标的起始值和终止值而操心。

注释:for each 循环语句的循环变量将会遍历数组中的每个元素,而不是下标值。

如果需要处理一个集合中所有元素,for each循环语句相对于传统循环语句所做的改进很让人欣喜。在多数情况下还是需要使用传统的for循环。例如,不希望遍历整个集合,或者在循环内部需要使用下标值时。

数组拷贝

在Java中,允许将一个数组变量拷贝到另一个数组变量。这时,两个变量将引用同一个数组:

int [ ]  luckNumbers=age;

luckNumbers[5]=12;

下图显示了拷贝的结果:

如果数组元素是数值型,那么额外的元素将被赋值为0;如果数组元素是布尔型,则将赋值为false。如果拷贝数组的所有值,拷贝的数组长度小于原始数组的长度,则只拷贝前面的值。

命令行参数

 前面已经看到一个Java数组重复出现过很多次。每一个Java应用程序都有一个带String arg[ ]参数的main方法。这个参数表明main方法将接收一个字符串数组,也就是命令行上指定的参数。

例如,看如下程序:

public class Message
{
    public static void main(String [] args)
    {
        if(args.length==0||args[0].equals(".h"))
            System.out.print("Hello,");
        else if(args[0].equals(".g"))
            System.out.print("Goodbye,");
        for(int i=1;i<args.length;i++)
            System.out.print(" "+args[i]);
        System.out.println("!");
    }
}

如果使用下面这种形式调用这个程序:

java Message -g cruel world

args数组将包含以下内容:

args[0]: "-g"

args[1]: "cruel"

args[2]: "world"

这个程序会显示下面这个消息:

Goodbye,crual world!

数组排序

要想对数值型数组进行排序,可以使用Arrays类中的sort方法:

int [ ] a=new int[1000];

......

Arrays.sort(a);

这种方法使用了优化的快速排序算法。快速排序算法对于大多数数据集合来说都是效率比较高的。

多维数组

多维数组将使用多个下标访问数组元素,它适用于表示表格或更加复杂的排列形式。

121421
231710
182428
452327

 可以使用一个二维数组(也称为矩阵)来存储这些信息。这个数组被命名为count。

在Java中,声明一个二维数组相当简单。

例如:int [ ][ ] count;

对数组进行初始化之前是不能使用的。在这里可以如下初始化:

count=new int [a][b];

如果知道数组元素,就可以不调用new,而直接使用简写形式对多维数组进行初始化。

例如:int [ ][ ] count= {{12,14,21},{23,17,10},{18,24,28},{45,23,27}};

一旦数组初始化,就可以利用两个中括号访问各个元素,例如,count [i][j]。

到目前为止,我们看到的数组与其他程序设计语言中提供的数组没有多大区别。但在底层实际存在着一些细微的差异,有时你可以充分利用这一点:Java实际上没有多维数组,只有一维数组。多维数组被解释为“数组的数组”。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清穷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值