零基础入门学习java第十节:Java中的数组

什么是数组?顾名思义,就是数据的组合,把一些相同类型的数放到一组里去。

那为什么要用数组呢?比如需要统计全班同学的成绩的时候,如果给班上50个同学的成绩信息都命名一个变量进行存储,显然不方便,而且在做成绩统计,如求总分,平均分,方差等的时候,遍历成绩信息又成了一大难题,这个时候,你就需要用到数组了。

数组可以很好的解决这两个问题,数组名只有一个,只需要使用数组名加下标来访问各个元素的信息即可,遍历的时候,由于下标是连续的,所以访问起来十分方便。

接下来,就开始正式介绍一下数组吧。

数组是用于存储相同数据类型的集合,使用数组前需要先声明数组,声明方式为:int[] a; 这里只声明了变量,并没有真正初始化为数组。应该使用new运算符创建数组,int[] a = new int[100]; 这里声明了一个大小为100的整数型数组,也就是说,里面可以存放最多一百个整数。需要注意的是,数组的下标是从0-99,而不是1-100,所以,数组里的最后一个数是a[99]而不是a[100],数组定义好之后,就可以用循环结构来进行赋值操作。

int[] a = new int[100];

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

a[i] = i;

新建的数字数组,里面元素都会被初始化为0,如果是逻辑型数组,则都会初始化为假,对象型数组则初始化为null,当你创建一个字符串数组的时候,里面元素都是null而不是空字符串,所以如果希望初始化后为空串,则需要像上述操作那样,遍历每个元素来赋值空串。

对于Java中的数组遍历,还有一种更简便的方法,类似于C#中的for each循环,Java也有同样的for each操作。

for(int element:a)

System.out.println(element);

这段代码会依次打印a中的元素,每个元素占一行,这里的每次循环,都会将数组a中的一个元素暂存在element中,处理完之后在将下一个元素存放在element中。这样做的好处是,省略了下标处理,这样就不存在下标越界的问题了,看起来也更加简洁。当然,如果在循环中需要利用下标进行一些判断或者处理,就只能需要使用普通的for循环来处理了。两种方法各有优点,具体情况具体分析即可。

对于数组的初始化,有几种比较常见的方式。

int[] a={1,2,3,4,5};//这里不需要使用new

new int[]{2,3,4,5,6};//匿名数组

a = new int[]{2,3,4,5,6};

如果你有学过C或者C++的话,这里的int[] a= new int[100]; 相当于C++中的int* a = new int[100];也就是说,数组变量是一个指针,所以将一个数组变量拷贝给两一个数组变量时,它们将指向同一个数组。举个栗子:

int[] a;

int[] b = {3,4,5,6};

a = b;

a[2] = 10;

System.out.println(b[2]);

这里将输出10,也就是说b指向的数组的元素被改变了。如果只想把一个数组里的元素的值拷贝到另一个数组中去的话,就要使用Arrays类的copyOf方法,这个方法有两个参数,第一个是需要拷贝的数组,第二个是需要拷贝的长度。来看一个栗子:

package pers.frank.test;

import java.util.Arrays;

public class Test{

public static void main(String[] args) {

int[] a;

int[] b = {3,4,5,6};

a = Arrays.copyOf(b,8);

a[2] = 10;

System.out.println("==B==");

for(int i:b)

System.out.println(i);

System.out.println("==A==");

for(int i:a)

System.out.println(i);

}

}

这样,会循环输出数组b和数组a的各个元素。

这里我们将第二个参数设置成了8,而数组b的长度只有4,那结果会怎样呢?答案显而易见,会把多的长度用0填充。

在前面的栗子里,我们经常看到Java应用程序里带有String[] args的main方法,这个参数表名,main方法接收一个字符串数组,也就是命令行参数。举个栗子:

public class Test{

public static void main(String[] args) {

if(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.print("!");

}

}

运行结果如下:

下面再讲讲数组排序,Arrays类中有一个sort方法,用于给数组的元素进行排序,使用的是快速排序算法,算是效率比较高的算法了。这里举个栗子进行演示。

import java.util.Arrays;

public class Test{

public static void main(String[] args) {

int[] numbers = new int[10];

for(int i=0;i<10;i++){

numbers[i] = (int)(Math.random()*10);

}

System.out.println("Before Sort:");

for (int j:numbers){

System.out.println(j);

}

Arrays.sort(numbers);

System.out.println("After Sort:");

for (int j:numbers){

System.out.println(j);

}

}

}

最后再说说多维数组吧,之前的数组只能算是一维数组,二维数组就像Excel的表格那样,有着行跟列,如果有了解过矩阵的话,那对于二维数组应该就不陌生了,在Java中声明二维数组也很简单: int[][] number; 只比一维数组多了一对[]。同样也需要用new来定义数组大小。当然也可以使用类似于一维数组的初始化方法。

int[][] numbers = {

{1,2,3},

{4,5,6},

{7,8,9}

}

数组元素的访问同样需要使用两个方括号,如numbers1,这里的值是数字6,第一个方括号里代表行号,第二个方括号里代表列号,所以这里就是第二行,第三列的数。如果需要遍历二维数组的话,就需要使用两个for循环了,

for(int i=0;i

for(int j=0;j

System.out.println(numbers[i][j]);

}

}

至于更高维度的数组,一般不会用到,这里就不多介绍了。

至此本篇讲解完毕,欢迎大家继续关注!

真正重要的东西,用眼睛是看不见的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容

  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 3,310评论 0 9
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,850评论 0 2
  • 第四天 数组【悟空教程】 第04天 Java基础 第1章数组 1.1数组概念 软件的基本功能是处理数据,而在处理数...
    Java帮帮阅读 1,587评论 0 9
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,128评论 0 41
  • 记者去采访一位九十三岁的老寿星,希望他能讲讲长寿的秘诀。老寿星说:“我不抽烟、也不喝酒、从来都不乱发脾气”,正说着...
    梓毓爸阅读 201评论 0 0