No.10 数组

数组的定义:

  • 一维数组的声明方式: type var[]; type[] var;一般使用后者,前者为c/c++语言的书写方法。

(1)声明数组时不能指定其长度(数组中元素的个数)int [] num;
(2)定义数组对象的时候必须指定长度 num = new int[3];
(3)声明和创建数组同时进行int [] num = new int[3];

注意两者的不同:声明和创建数组不同,它是两个过程,只要生成数组对象就要初始化数组长度。

  • 二维数组的声明方式:type[][] var;二维数组对象的定义方式:var = new type[int a][int b];也可以使用:var = new type[int a][];type[0] = new type[int b]...... a代表行数,b代表列数,由于数组空间不是连续分配的,所以每一行的列数可以不同。
    二位数组被Java定义为数组的数组,即行数是一个数组(第一个索引指定有几行),列数是一个数组(第二个索引)指定一行中有几个元素

  • 数组的初始化过程:
    (1)动态初始化(定义数组的同时指定数组长度):
    一维数组的动态初始化:
    int [] num = new int [3];
    num[0] = 0 ;
    num[1] = 1 ;
    num[2] = 2 ;

    先定义好数组,再为数组的指定元素赋值;数组中只能存放相同类型的元素,所以所赋值必须为指定类型;
    二维数组的动态初始化
    type [][]num = new type[1][1];
    num[0][0] = new type(type value);
    num[0][1] = new type(type value);
    num[1][0] = new type(type value);
    num[1][1] = new type(type value);

    二维类型的数组,必须首先为行分配引用空间,然后再顺次为每一行分配空间。而且,必须为每个数组元素单独分配空间。**
    例如:

    String[ ][ ] s= new String[2][ ];
    s[0]= new String[2];//为第一行分配引用空间
    s[1]= new String[2]; //为第二行分配引用空间
    s[0][0]= new String("Good");// 为每个数组元素单独分配空间
    s[0][1]= new String("Luck");// 为每个数组元素单独分配空间
    s[1][0]= new String("to");// 为每个数组元素单独分配空间
    s[1][1]= new String("You");// 为每个数组元素单独分配空间
    (2)静态初始化:
    一维数组的静态初始化
    String[] s = {"abc","def","ghj"};
    二维数组的静态初始化
    int[ ][ ] num={{1,2},{2,3},{3,4,5}};
    注意此时的二位数组第一行有2个元素,第二行有2个元素,地三行有3个元素,如果不是一个3行3列的数组。

    int[][] num = {{1,2},{3,4,5}};
    System.out.println(num[0][2]);//ArrayIndexOutOfBoundsException
    System.out.println(num[1][2]);//5
    

注意:暂且可以理解为有几层{}就是几维数组;
详细的二维数组初始化过程移步

http://blog.csdn.net/chenshijun0101/article/details/6640377

增强for循环输出数组中的元素:

(1) 循环输出一维数组:

    int [] one = {1,2,3,4,4,4};
    for(int a : one){
        System.out.print(a + " ");
    }

(2)循环输出二维数组:

 int[][] num = {{1,2},{3,4,5}};
 for(int[] a : num1){
    for(int b : a){
    System.out.println(b);  
    }
  } 

数组常用操作:

(1)获取数组的长度:数组对象.length;值等于数组中元素的个数,而最后一个元素的索引值+1;
(2)数组的复制:System.arraycopy(源数组, 从源数组第几个元素开始复制, 目的数组, 从目的数组的第几个元素开始复制, 复制元素的个数)。该方法没有返回值。改变了目的数组中的元素值;注意第几个是索引值加1;

int[][] num1 = new int[2][2];
int[][] num = {{1,2},{3,4,5}};
System.arraycopy(num, 1, num1, 0, 1);
  for(int[] a : num1){
        for(int b : a){
            System.out.println(b);//3,4,5,0,0
        }
    }   

(3)数组的排序Array.sort(数组引用);按照默认方法对数组进行排序,若是int则从大到小排列;
(4)在已排序的数组中查找某个元素:Arrays.binarySearch(数组名)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,774评论 0 33
  • 题目类型 a.C++与C差异(1-18) 1.C和C++中struct有什么区别? C没有Protection行为...
    阿面a阅读 7,715评论 0 10
  • 最近买了一把尤克里里。 朋友很意外,问我为什么突然想学一门乐器了。其实这也算不上是心血来潮,一直都喜欢那种背着一把...
    ALA3637阅读 750评论 0 1