首页 > 代码库 > Java中的数组

Java中的数组

在java语言中,数组是一种最简单的使用频率很高的复合数据类型。数组是有序数据的集合与java中的集合略有不同,数组中的每个元素具有相同的数据类型,既可以用来存储基本类型的数据,也可以用用来存储引用数据类型的数据。可以用一个统一的数组名和下标来唯一地确定数组中的元素。值得注意的是:数组本身就是一种引用类型,例如 int是一种基本类型,但是int[]确是一种引用类型,数组有一维数组和多维数组。

一维数组:

      1. 一维数组的定义

        type[] arrayName;
  类型(type)可以为Java中任意的数据类型,包括简单类型和复合类型。
  例如:
   int[] intArray;
   Date[] dateArray;
         有的时候我们也会看到这样一种定义方式 type arrayName[ ];这种方式不推荐使用。。。

  2.一维数组的初始化

  2.1 静态初始化:初始时有程序员显示的指定每个数组元素的初始值,有系统来决定数组的长度

                int[] arr;

                arr = new int[]{1,2,3,4};简写格式如下:int[] intArray={1,2,3,4};
    String[] stringArray={"a", "b", "c"};

  2.2 动态初始化:初始化时程序员只指定数组的长度,有系统来给那些数组中的元素分配初始值
    1)简单类型的数组
    int[] intArray;
    intArray = new int[5];

   2)复合类型的数组
    String[] stringArray;
    String stringArray = new String[3];/*为数组中每个元素开辟引用
                      空间(32位) */
    stringArray[0]= new String("a");//为第一个数组元素开辟空间
    stringArray[1]= new String("b");//为第二个数组元素开辟空间
    stringArray[2]= new String("c");// 为第三个数组元素开辟空间

  3.一维数组元素的引用

  数组元素的引用方式为:
     arrayName[index]

  index为数组下标,它可以为整型常数或表达式,下标从0开始。每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。

多维数组:

   在Java中其实多维数组就是在数组之中嵌套数组,其实和很多其他语言是一样的比如js,AS3,C等等。

1.二维数组的定义

  type[][] arrayName;

  2.二维数组的初始化

  2.1静态初始化
  int[][] intArray={{1,2},{2,3},{3,4,5}};

  Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。

   2.2 动态初始化
  1) 直接为每一维分配空间,格式如下:
  arrayName = new type[arrayLength1][arrayLength2];
  int[][] a = new int[2][3];

  2) 从最高维开始,分别为每一维分配空间:
  arrayName = new type[arrayLength1][ ];
  arrayName[0] = new type[arrayLength20];
  arrayName[1] = new type[arrayLength21];
  …
  arrayName[arrayLength1-1] = new type[arrayLength2n];

  3) 例:
  二维简单数据类型数组的动态初始化如下,
  int[][] a = new int[2][ ];
  a[0] = new int[3];
  a[1] = new int[5];

  对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。
  而且,必须为每个数组元素单独分配空间。

  例如:
  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");// 为每个数组元素单独分配空间

  3.二维数组元素的引用
  
  对二维数组中的每个元素,引用方式为:arrayName[index1][index2]
  例如: num[1][0];

  4.二维数组举例:
         规则二维数组:

 

  public class Study {

 

  public static void main(String args[]) {

 

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

 

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

 

  for(int j = 0; j<a[i].length; j++){

 

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

 

  }

 

  }

 

  }

 

  }

      不规则二维数组:

  public class Study {

  public static void main(String args[]) {

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

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

  for(int j = 0; j<b[i].length; j++){

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

  }

  }

  }

  }

数组重要方法:

一、填充数组:Arrays.fill()方法

  缺点:填充的数据单一。

  用法1:接受2个参数

  Arrays.fill( a1, value );

  注:a1是一个数组变量,value是一个a1中元素数据类型的值,作用:填充a1数组中的每个元素都是value

  例如:

  public class Study {

  public static void main(String[] args) {

  int[] a = new int[5];

  Arrays.fill(a, 1);

  for (int i : a) {

  System.out.println(i);

  }

  }

  }

用法2:接受4个参数

  第一个参数指操作的数组,第二个和第三个指在该数组的某个区域插入第四个参数,第二个参数指起始元素下标(包含该下标),第三个参数指结束下标(不包含该下标),注意:java的数组下标从0开始

  例如:

  public class Study {

  public static void main(String[] args) {

  int[] a = new int[5];

  Arrays.fill(a, 1);

  Arrays.fill(a, 1, 3, 2);

  for (int i : a) {

  System.out.println(i);

  }

  }

  }

  二、复制数组:clone()方法

  clone()方法,限制:全部复制,无法部分的复制。

  public class Study {

  public static void main(String[] args) {

  int[] a = new int[5];

  int[] b;

  Arrays.fill(a, 1);

  b = a.clone();

  for (int i : b) {

  System.out.println(i);

  }

  }

  }

  三、比较数组:Arrays.equala()方法

  comparable接口:compareTo()方法 , 实现comparable接口的类有了自身的比较功能

  comparator接口:compare()方法和equals()方法

  一般只需实现compare()方法 用于编写自定义的比较方法

  例子:

  定义Person类,对该类进行比较

    public class Person {

  String firstname, lastname;

  Boolean sex;

  int age;

  public Person(String firstname, String lastname, Boolean sex, Integer age) {

  super();

  this.firstname = firstname;

  this.lastname = lastname;

  this.sex = sex;

  this.age = age;

  }

  public String getFirstname() {

  return firstname;

  }

  public void setFirstname(String firstname) {

  this.firstname = firstname;

  }

  public String getLastname() {

  return lastname;

  }

  public void setLastname(String lastname) {

  this.lastname = lastname;

  }

  public Boolean getSex() {

  return sex;

  }

  public void setSex(Boolean sex) {

  this.sex = sex;

  }

  public Integer getAge() {

  return age;

  }

  public void setAge(Integer age) {

  this.age = age;

  }

  }

  实现Comparator,定义自定义比较器

  import java.util.Comparator;

  public class PersonComparator implements Comparator<Person> {

  @Override

  public int compare(Person arg0, Person arg1) {

  if (arg0.getAge() > arg1.getAge()) {

  return -1;

  }

  return 1;

  }

  }

  测试比较器

public class Study {

  public static void main(String[] args) {

  Person[] p = {

  new Person("ouyang", "feng", Boolean.TRUE, 27),

  new Person("zhuang", "gw", Boolean.TRUE, 26),

  new Person("zhuang", "gw", Boolean.FALSE, 28),

  new Person("zhuang", "gw", Boolean.FALSE, 24)};

  Arrays.sort(p, new PersonComparator());

  for (Person person : p) {

  System.out.println(person.getFirstname());

  System.out.println(person.getLastname());

  System.out.println(person.getAge());

  System.out.println(person.getSex());

  System.out.println();

  }

  }

  }

  四、数组排序:Arrays.sort()方法

五、查找数组:Arrays.binarySearch()方法

  缺点:数组必须已经过了排序,否则结果无法预料

  public class Study {

  public static void main(String[] args) {

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

  Arrays.sort(a);

  System.out.println(Arrays.binarySearch(a, 3));

  }

  }

  六、显示数组数据

  1)数组存放的是对象,如字符串:可以使用Arrays.asList方法将数组转换为List容器后显示。

  2)数据是基本类型:可以使用for(int i:array) System.out.println(i); 显示

  3)Arrays.toString()方法

  public class Study {

  public static void main(String[] args) {

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

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

  for (int i : a) {

  System.out.println(i);

  }

  }

  }

 

Java中的数组