利用List比较数组有优势吗?

时间:2023-02-15 17:37:07

 

  
 
 
  1. package cn.com.keke.arr.test2;  
  2.  
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.  
  6. /**  
  7.  * CompareArray  
  8.  *   
  9.  * @author kk  
  10.  * @version 1.0  
  11.  *   
  12.  */ 
  13. public class CompareArray {  
  14.  
  15.     /**  
  16.      * 请问,利用集合来比较数组中元素与使用数组原始比较,有什么区别?<br>  
  17.      *   
  18.      * 如果数组大小超大,比如上万后,会发生什么?是不是用原始方法更好?  
  19.      *   
  20.      * @param args  
  21.      */ 
  22.     public static void main(String[] args) {  
  23.  
  24.         int[] arr1 = { 9045678123 };  
  25.         int[] arr2 = { 151045678123 };  
  26.  
  27.         /**  
  28.          * 利用集合看起来循环次数为:arr1.length + arr2.length,那么真的提高了  
  29.          * 速度吗?  
  30.          */ 
  31.         arrayListSort(arr1, arr2);  
  32.  
  33.         System.out.println();  
  34.  
  35.         /**  
  36.          * 原始比较,循环次数为:arr1.length*arr2.length,那么它真的比利用集合效果  
  37.          * 差吗?  
  38.          */ 
  39.         arrayDoubleFor(arr1, arr2);  
  40.     }  
  41.  
  42.     /**  
  43.      * arrayListSort<br>  
  44.      * Description: 使用List集合.外观看起来循环次数:arr1大小+arr2大小;<br>  
  45.      * 但是集合ArrayList类方法contains(Object o)实现依然靠for循环数组,代码为<br>  
  46.      *   
  47.      * public boolean contains(Object o) {  
  48.      *      return indexOf(o) >= 0;  
  49.      *  }  
  50.      *   
  51.      *  public int indexOf(Object o) {  
  52.      *      if (o == null) {  
  53.      *          for (int i = 0; i < size; i++)  
  54.      *              if (elementData[i]==null)  
  55.      *                  return i;  
  56.      *              } else {  
  57.      *                  for (int i = 0; i < size; i++)  
  58.      *                      if (o.equals(elementData[i]))  
  59.      *                          return i;  
  60.      *      }  
  61.      *      return -1;  
  62.      *   }  
  63.      *  上面elementData[]大小为add()的个数,详细请查看ArrayList类.<br>  
  64.      *   
  65.      * @param arr1  
  66.      * @param arr2  
  67.      */ 
  68.     static void arrayListSort(int[] arr1, int[] arr2) {  
  69.         List list = new ArrayList();  
  70.         for (int i = 0, n = arr1.length; i < n; i++) {  
  71.             list.add(arr1[i]);  
  72.         }  
  73.  
  74.         for (int i = 0, n = arr2.length; i < n; i++) {  
  75.             int tmp = arr2[i];  
  76.             if (list.contains(tmp)) {// ArrayList.contains(Object o)  
  77.                 System.out.println(tmp);  
  78.             }  
  79.         }  
  80.     }  
  81.  
  82.     /**  
  83.      * arrayDoubleFor<br>  
  84.      * Description: 原始数组比较方式  
  85.      *   
  86.      * @param arr1  
  87.      * @param arr2  
  88.      */ 
  89.     static void arrayDoubleFor(int[] arr1, int[] arr2) {  
  90.         for (int i = 0, n = arr1.length; i < n; i++) {  
  91.             int a = arr1[i];  
  92.             for (int j = 0, m = arr2.length; j < m; j++) {  
  93.                 int b = arr2[j];  
  94.                 if (a == b) {  
  95.                     System.out.println(a);  
  96.                 }  
  97.             }  
  98.         }  
  99.     }  
  100. }  

 

本文出自 “走�M地铁等�L景” 博客,请务必保留此出处http://cnctocn.blog.51cto.com/4183095/837508