数组

来源:互联网 发布:然足下卜之鬼乎的之 编辑:程序博客网 时间:2024/05/03 09:26


  数组是Java语言中的一种引用数据类型,它是一组相同类型的数据的有序集合。适用于集中管理类型相同、用途相近的多个数据。
  Java的数组要求所有数组元素具有相同的数据类型。
    一旦数组的初始化完成,数组在内存中所占的存储空间将被固定下来,因此数组的长度不可改变。
  通过数组元素的索引号(或者说是下角标)来访问数组元素。
一维数组
  数组的维数可以理解为一个数组中数据组合的层次数,只有一个层次的数据组合而成的数组被称为一维数组。
        数组的长度:S数组中的元素个数
      数组元素的访问:数组名[元素下标]
    (1)一维数组的声明
        格式:类型名 变量名[];或类型名[]变量名;
        例如,int[] arr;           double salary[];    
        String[] args;   Student  s[]; 
        声明了数组类型变量,运行时系统只为引用变量分配引用空间,并没有创建对象,也不会为数组元素分配空间,因此尚不能使用任何数组元素。
      声明数组类型变量时不允许指定数组的长度:int[3] a;   × 
     (2)数组对象的创建和使用
         在Java语言中通常使用关键字new创建数组对象,其语法格式为:new  类型名[n]
          例如,int [] arr;
        arr=new int[3]; (注意:在访问数组元素时合法的下标范围是0~n-1,如果越界,程序编译时不会报错,但程序运行时会抛越界异常。)
      基本数据类型的一维数组的声明、创建和使用 。
      引用类型的一维数组的声明、创建和使用。 
    (3)数组对象的length属性
        数组对象拥有一个有系统自动提供的特殊属性length(以只读的方式给出数组的长度),该属性为int类型,可直接访问,在遍历数组元素时非常有用。
       例如,for(int i;i<arr.length;i++)    …
   注意:Java 语言中数组长度并不属于其数据类型的组成部分,一个声明为int[]类型的变量a 可以指向一个长度为3的int[] 类型数组对象,也可以指向一
   个长度为5的int[] 类型数组对象,例如,int[] a; a=new int[3];a=new int[5];  ? 
     (4)数组的静态初始化
     如果在创建数组对象时已能确定其各元素的值,则可采用一种简化的书写方法来创建和初始化数组对象。
     (5)foreach循环
      使用foreach循环遍历数组和集合元素时,无须获得数组和集合的长度,无须根据索引来访问数组元素和集合元素,系统自动遍历数组和集合的每个元素。
    格式:
    for(类型  变量名 : 数组名 | 集合名){ //变量自动迭代访问每个元素...}
    注意:若数组中有n个元素,则该循环就循环n次;每一次循环都将数组中的一个元素赋给变量,循环体就对该变量进行操作。
    注意:
   使用foreach循环遍历数组元素无须获得数组长度,也无须根据索引来访问数组元素。
   无须循环条件,无须循环迭代语句,这些部分都由系统来完成。
    当使用foreach循环时,通常不要对循环变量进行赋值,虽然没有语法错,但极容易引起错误。
  注意:当使用foreach来迭代访问数组元素时,循环变量相当于临时变量,系统会把数组元素依次赋给这个临时变量,但它并不是数组元素。改变循环变量的值,
  并不能改变元素的值。因此,如果希望改变数组元素的值,则不能使用这种foreach循环。
多维数组
  多维数组可以理解为由若干低维数组组成的数组,例如,多个一维数组可以组合而成为“二维数组”,多个二维数组组成三维数组…
  要访问二维数组中的某个元素,需要知道该元素的位置(第几行、第几列)
  (1) 二维数组的声明
  格式:类型名 变量名[][];或类型名[][]变量名;
  例如,int[][] s; Student  s[][]; 
  需注意:声明了数组类型变量,运行时系统只为引用变量分配引用空间,并没有创建对象,也不会为数组元素分配空间,因此尚不能使用任何数组元素。
  (2)二维数组对象的创建和初始化
    <1>静态初始化
 格式:类型[][]  数组名={{第0行初值},…,{第n-1行初值}};
 <2>动态初始化
        直接为每一维分配空间
  例如,int [][] s=new int[5][3];
     从最高维开始(必须从最高维开始),分别为每一维分配空间。
  例如,int[][] s=new int[5][]; s[0]=new int[3];   s[1]=new int[3];…
      注意: Java中允许二维数组中每行的元素个数不同,即每行的列数可以不同。例如,int[][] s=new int[3][];
       s[0]=new int[1];s[1]=new int[2];s[2]=new int[3];
      注意:使用二维数组s的length属性可获得二维数组高维的大小,即行数;使用s[i].length属性可获得二维数组每一行的列数,
   即每一行的元素个数。
    for(int i=0;i<s.length;i++){
           for(int j=0;j<s[i].length;j++)
                  sum+=s[i][j];
   }

数组排序
    在JDK的java.util包中定义的Arrays类提供了多种数组操作方法,实现了对数组元素的排序、填充、转换、增强检索和深度比较等功能,所有的这些方法都是static的。
  数组元素的排序方法:
  原型:public static void sort(<type>[] a);
  例如,int[] a={4,12,0,-5,45,-56};
         rrays.sort(a);
   注意:数组元素的排序通常指一维数值型数组元素按升序排序,偶尔也会涉及一维String数组的排序,多维和其他引用类型的数组排序实用意义不大。

原创粉丝点击