Java基础之数组

​一、数组定义

数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照 一定的先后次序排列组合而成。数组中每个数据称作一个元素,每个元素则可以通过一个索引(下标)来访问它们。数组的三个基本特点:

1、长度是确定的。数组一旦被创建,它的大小就是不可以改变的。

2、其元素必须是相同类型,不允许出现混合类型。

3、数组类型可以是任何数据类型,包括基本数据类型和引用类型。

注: 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中存 储的。

二、数组的声明

一维:元素类型数组名[ ];或元素类型 [ ] 数组名;

例:float a [];或 float [] a;

二维:元素类型数组名[ ] [ ];或元素类型[ ] [ ]数组名;

例:float a [][];或 float [] []a;

三、创建数组

数组名 = new元素类型[元素个数];

float[] a = null;

a = new float[4];

float[][] a = null;

a = new float[4][5];

注意:java中声明数组和创建数组可以一步完成

int[] s = new int[10];

float a[][] = new float[4][4];

java允许使用int型变量的值指定数组元素的个数

intsize =30;

double[] d =newdouble[size];

四、获取数组的长度

length就是数组元素的个数

int[] a = new int[4];int[][] d = new int[3][5];

System.out.println("a="+a.length);

System.out.println("d="+d.length);

输出a=4     d=3;

五、数组初始化

数组的声明创建初始化一步完成:

float a[] = {2.3f, 3.1f, 2.0f, 6.2f};

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

六、数组复制

1、arraycopy方法

用System类调用arraycopy方法。

System.arraycopy(a ,x1 ,b ,x2 ,length);

将数组a中从x1开始到length个元素复制到数组b,数组b从x2开始存放这些数据;数组b必须满足b.length-x2>a.length-x1;也就是说数组b必须有足够的位置存放从数组a中复制过来的数据;

例:

importjava.util.*;

publicclassdemo{

publicstaticvoid​main(String args[]) {

int[] a = {2,3,4,1,5,6,7,8,9,11},//10位

            int [] b= {33,56,78,1,4,0,54,5,7,99,12,13};//12位

            System.arraycopy(a,0,b,1,a.length);

            System.out.println(Arrays.toString(b));

      }

}

运行结果:[33, 2, 3, 4, 1, 5, 6, 7, 8, 9, 11, 13]

2. copyOf和copyOfRange方法

用Arrays类调用copyOf和copyOfRange方法

b= Arrays.copyOf(a, y);

将数组a从下标x开始长度为y的元素复制到数组b中;

b= Arrays.copyOfRange(a, x, y);

将数组a从下标x开始长度为y-x的元素复制到数组b中。

例:CopyArray.java

importjava.util.Arrays;

publicclassCopyArray{

publicstaticvoidmain(String[] args){

int[] a = {4,2,5,96,28,3,9,8,6,33,};//定义数组a并赋值

          int[] b,c,d;//定义数组b,c,d

          System.out.println("数组a="+Arrays.toString(a));

          b = Arrays.copyOf(a,a.length);//复制数组a到数组b

          System.out.println("数组b="+Arrays.toString(b));

          c = Arrays.copyOf(a,4);//复制数组a中前4位到数组c中

          System.out.println("数组c="+Arrays.toString(c));

          d = Arrays.copyOfRange(a,6,a.length);//复制数组a中后四位(第6位到最后一位)

          System.out.println("数组d="+Arrays.toString(d));

          c[c.length-1] = -100;//将-100赋给数组c中最后一位

          System.out.println("数组c="+Arrays.toString(c));

      }

}

运行结果:数组a=[4, 2, 5, 96, 28, 3, 9, 8, 6, 33]

数组b=[4, 2, 5, 96, 28, 3, 9, 8, 6, 33]

数组c=[4, 2, 5, 96]

数组d=[9, 8, 6, 33]

数组c=[4, 2, 5, -100]

数组输出用:Arrays.toString(数组名)

3、getChars(start,end,char c[],x)方法

复制部分字符。将当前字符串从位置start到end-1的位置上的字符复制到数组c中,数组c从x处开始存放。

toCharArray()方法。将字符串全部字符存放入数组中。

例:

Strings ="abcdefg";//定义字符串s

char a[]  = new char[3];//声明创建数组

s.getChars(2,5,a,0);//将字符串s从下标2到下标4复制到数组c中,c从下标0处存放

运行结果:cde

七、数组替换

1、fill(int[] arr,int value);

替换所有

该方法可将指定的value值分配给数组arr的每一个元素。

float[]b={2.3f,3.1f,2.0f,6.2f,2.4f,0.9f};

Arrays.fill(b,6);//将b中所有元素替换成6

运行后b为{6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f}

2、fill(int[] arr,int begin, int end, int value);

替换部分

该方法可将数组arr中从下标begin到下标end位置的所有元素替换成value

float[]b={2.3f,3.1f,2.0f,6.2f,2.4f,0.9f};

Arrays.fill(b,0,3,6);

运行后b为{6.0f, 6.0f, 6.0f, 6.2f, 2.4f, 0.9f}

如果指定的索引位置大于或等于要进行填充的数组的长度,则会报出ArrayIndexOutOfBoundsException(数组越界异常)异常(比如end>arr.length)。

七、数组排序

通过Arrays类的静态sort()方法可以实现对数组的排序。sort方法提供了多种重载形式,可对任意类型的数组进行升序排序。

float[] b =  {2.3f,3.1f,2.0f,6.2f,2.4f,0.9f};

Arrays.sort(b);

for(inti =0; i < b.length; i++) {

System.out.println("第"+i+"个元素是:"+b[i]);

}

运行后b为 {0.9f, 2.0f, 2.3f, 2.4f, 3.1f, 6.2f}

八、连接两个数组

使用ArrayUtils.addAll方法将两个数组连接成一个

String[] array1 = {"as","ff","fd","oo"};

String[] array2 = {"mm","lk","ui"};

//org.apache.commons.lang.ArrayUtils;

String[] t = (String[]) ArrayUtils.addAll(array1, array2);

运行后t为{"as", "ff", "fd", "oo", "mm", "lk", "ui"}

文末总结:

数组在实际开发中使用的情况一般来说并不是特别多(相对集合来说),实际开发使用比较多的是集合(后面会讲),但是数组是有用的,没有数组就没有集合Collection,集合的底层就是使用数组实现的。二维数组属于Java学习的入门知识,是Java学习的基础,所以对数组的理解很重要,毕竟有了基础才能提升嘛!

另外我还准备了Java数组的视频教程供各位小伙伴们学习:

想学习更多关于Java的知识,关注微信公众号【Eric学习java】,回复【ericjavabase1001】可免费领取Java学习视频教程链接哦!注意是免费哦,一切收费的都是骗子!

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