北大青鸟光谷校区

北大青鸟光谷校区

  • 北大青鸟徐东校区
  • 北大青鸟光谷校区
  • 北大青鸟高新校区
  • 荆州青鸟之家
  • 襄阳青鸟之家

17740513250

百日千才

java自学数组-北大青鸟武汉宏鹏鲁广java培训

发布日期:2023-03-31来源:武汉北大青鸟武汉校区作者:武汉宏鹏

      有人问java自学好不好?北大青鸟武汉宏鹏光谷校区专业老师说,java自学适合有毅力的以及有学习方法的人,针对自学人士,北大青鸟武汉宏鹏光谷校区的java培训老师给出了java自学数组相关技术.

  在Java纯面向对象的语言世界中,万事万物皆是对象。数组也不例外,而数组这个数据结构类型在编程的世界也是一个宠儿,因为它可以批量化处理具有共性的数据。接下来就对数组的整体做一个梳理。

  一,基础

  1.1 数组的声明,数组对象与初始化(以一维数组为例)

  声明:

  datatype[] arrays;//Java程序员习惯这样写

  //或者

  datatype arrays[];C/C++则采用这种方式声明数组

  创建数组对象:

  int[] arrays;

  arrays = new int[length];

  //或者也可以一步完成数组的声明与对象创建:

  int[] arrays = new int[length];

  初始化,可以分为三种形式。

  默认初始化:

  int[] arrays = new int[10];//默认初始化,为10个0

  静态初始化:即是直接赋具体数值给数组。

  int[] arrays = {1,3,4,5,6,7,10}//静态初始化

  动态初始化:常用的一种形式。

  for(int i=0;i

  arrays[i] = i*i+8; //有关i的表达式或者其他表达式

  }

  数组的概念,C/C++/Java定义都是一致的,数组内存储的数据类型必须是一致的,且索引都是从 0~length-1 .而PHP,javascript语言的数组定义就相对来说比较宽泛,除了索引数组外(且没有硬性规定数组的数据类型,所以可以存储各种类型的数据),还有关联数组。

  在访问索引数组的时候,任何语言都会有一个报出数组越界的错误。但在Java中会报出ArrayIndexOutOfBoundsException错误(异常是我们都不想看到的,所以基本功的扎实与否是写出一手好代码的前提)。

  二,N维数组

  N在理论上讲可以从1到无穷,只是我们认识的维度高还不超过4维,所以多维数组的声明,对象创建与使用从理论上讲和一维是一致的。如下:

  一维: int[] arrays = new int[length];

  二维: int[][] arrays = new int[m][n]; //m,n为非零正整数,且不一定相等;且n可以不写任何数字,即使不一定要求二维数组是矩阵。

  三维: int[][][] arrays = new int[l][m][n];

  三,数组对象概念分析

  一维数组的对象参考,如下代码所示:

  int[] arrays1= new int[5];

  int[] arrays2 = arrays1; //指向同一个数组

  for(int arr:arrays1){

  System.out.printf("%2d",arr);

  }

  System.out.println();

  //数组填充

  Arrays.fill(arrays1,60);

  //填充后输出

  for(int arr:arrays1){

  System.out.printf("%3d",arr);

  }

  System.out.println();

  arrays2[0] = 80;

  //改变索引为0的数值后输出

  for(int arr:arrays1){

  System.out.printf("%3d",arr);

  }

  //执行结果如下:

  0 0 0 0 0

  60 60 60 60 60

  80 60 60 60 60

  程序的第二行的意思是,将arrays1参考的对象也给arrays2参考,并没有改变对象所指向的数组内容。执行完第十四行后,arrays1[0]的数值发生了变化。如图一所示:

  图一

  二维数组的对象与参考名称,

  int[][] arrays = new int[3][2];

  直接参见图二所示:

  图二

  重点在这里,若是基本数据类来创建,会不会也是同样的效果呢?

  如一:

  Integer[] arrays = new Integer[3];

  请问上面的这个程序片段建立几个Integer对象呢? 3个?错,是0个,不对啊,length=3啊!事实上如图三所示,因为对象默认的值是null.

  图三

  那么同样的道理,如是看到下面的这个代码,阁下就不会认为是6个对象了吧!

  Integer[][] = new int[3][2];

  直接上图,参考图四。

  图四

  四,数组对象操作

  4.1 数据填充 fill();需要import java.util.Arrays;

  在三数组对象分析的个程序中已经有所体现,故略去代码。

  4,2 数组复制

  方式一:

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

  int[] arrays2 = new int[arrays1.length];

  for(int i =0 ;i

  arrays2[i] = arrays1[i];

  }

  方式二:调用系统函数System.arraycopy(来源数组,来源起始索引,目的数组,目的启示索引,复制长度)

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

  int[] arrays2 = new int[arrays1.length];

  System.arraycopy(arrays1,0,arrays2,0,arrays1.length);

  方式三:JDK6以上,有一个更加方便的函数Arrays.copyof(),这种情况下不用建立新的数组。

  int arrays1[] = {1,2,3,4,5,6,7,8,9,10};

  int arrays2[] = Arrays.copyOf(arrays1, arrays1.length);

  //验证数组2的结果

  for(int arr:arrays2){

  System.out.printf("%3d", arr);

  }

  System.out.println();

  arrays2[0] = 88;//改变数组2的第0个元素的值

  //输出数组1的值,排除对象参考的影响

  for(int arr:arrays1){

  System.out.printf("%3d", arr);

  }

  //执行结果是:

  1 2 3 4 5 6 7 8 9 10

  1 2 3 4 5 6 7 8 9 10

  4.3 深层复制(Deep Copy)

  先参考如下代码:

  package com.ivantian.Array;

  //Car 类

  class Car{

  String color;

  char size;

  Car(String color,char size){

  this.color = color;

  this.size = size;

  }

  }

  //

  public class DeepCopy {

  public static void main(String[] args){

  Car[] c1 = {new Car("red",'L'),new Car("Blue",'M')};

  Car[] c2 = new Car[c1.length];

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

  Car car = new Car(c1[i].color,c1[i].size);

  c2[i]=car;

  }

  c1[0].color = "yellow";//改变C1的颜色值

  System.out.println(c2[0].color);

  }

  }

  //执行结果是:

  red

  深层复制行为就是c1每个索引参考的对象会被复制,分别指定给c2每个索引,结果就会显示red.可参见图五。

      了解更多java学习技能请继续关注武汉北大青鸟官网.

关闭

只为了方便您就学 北大青鸟光谷校区 北大青鸟武汉校区

武汉市洪山区珞喻路724号(地铁二号线光谷广场站F口出

Copyright (c) 2006-2023 武汉宏鹏教育咨询有限公司 版权所有 All Rights Reserved.