疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java提供的数组的实用功能


 

   

  这一章节我们来讨论一下Java提供的数组的实用功能。

  1.复制

  我们下面来比较一下System.arraycopy和for

  package com.ray.ch14;

  import java.util.Arrays;

  public class Test {

  public static void main(String[] args) {

  int[] a = new int[10000000];

  Arrays.fill(a, 1);

  int[] b = new int[10000000];

  long startTime = System.currentTimeMillis();

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

  long endTime = System.currentTimeMillis();

  System.out.println(endTime - startTime);

  System.out.println("-------------");

  b = new int[10000000];

  startTime = System.currentTimeMillis();

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

  b[i] = a[i];

  }

  endTime = System.currentTimeMillis();

  System.out.println(endTime - startTime);

  }

  }

  输出:

  6

  -------------

  10

  从输出的数据看见,for比System.arraycopy要慢一些。当然,这种慢是忽略不计的,上面只是实验而已。

  不过我们需要注意:

  (1)使用System.arraycopy两个数组必须是同一个类型

  (2)数组的复制里面,如果是基本类型,则复制值,如果是对象,则复制引用(浅复制)

  2.数组的对比

  需要满足两个条件:

  (1)对应元素需要一致

  (2)元素个数需要一致

  package com.ray.ch14;

  import java.util.Arrays;

  public class Test {

  public static void main(String[] args) {

  int[] a = new int[5];

  Arrays.fill(a, 1);

  int[] b = new int[5];

  Arrays.fill(b, 1);

  int[] c = new int[5];

  Arrays.fill(c, 2);

  int[] d = new int[6];

  Arrays.fill(d, 1);

  System.out.println(Arrays.equals(a, b));

  System.out.println(Arrays.equals(a, c));// 元素不一致

  System.out.println(Arrays.equals(a, d));// 元素个数不一致

  }

  }

  输出:

  true

  false

  false

  下面举一些反例:

  package com.ray.ch14;

  import java.util.Arrays;

  public class Test {

  public static void main(String[] args) {

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

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

  System.out.println(Arrays.equals(a, b));

  }

  }

  输出:

  false

  package com.ray.ch14;

  import java.util.Arrays;

  public class Test {

  public static void main(String[] args) {

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

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

  System.out.println(Arrays.equals(a, b));

  }

  }

  输出:

  false

  上面的例子是基础类型的,下面是对象:

  package com.ray.ch14;

  import java.util.Date;

  import java.util.Arrays;

  public class Test {

  public static void main(String[] args) {

  MyClass[] myClasses1 = new MyClass[2];

  MyClass myClass1 = new MyClass();

  MyClass myClass2 = new MyClass();

  MyClass myClass3 = new MyClass();

  MyClass myClass4 = new MyClass();

  myClass1.setDate(new Date());

  myClass2.setDate(new Date());

  myClass3.setDate(new Date());

  myClass4.setDate(new Date());

  myClasses1[0] = myClass1;

  myClasses1[1] = myClass2;

  MyClass[] myClasses2 = new MyClass[2];

  myClasses2[0] = myClass1;

  myClasses2[1] = myClass2;

  System.out.println(Arrays.equals(myClasses1, myClasses2));

  myClasses2[0] = myClass3;

  myClasses2[1] = myClass4;

  System.out.println(Arrays.equals(myClasses1, myClasses2));

  }

  }

  class MyClass {

  private Date date;

  public Date getDate() {

  return date;

  }

  public void setDate(Date date) {

  this.date = date;

  }

  }

  输出:

  true

  false

  总结:这一章节主要讨论了Java提供的数组的实用功能。