- package cn.com.keke.arr.test2;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * CompareArray
- *
- * @author kk
- * @version 1.0
- *
- */
- public class CompareArray {
- /**
- * 请问,利用集合来比较数组中元素与使用数组原始比较,有什么区别?<br>
- *
- * 如果数组大小超大,比如上万后,会发生什么?是不是用原始方法更好?
- *
- * @param args
- */
- public static void main(String[] args) {
- int[] arr1 = { 9, 0, 4, 5, 6, 7, 8, 1, 2, 3 };
- int[] arr2 = { 15, 10, 4, 5, 6, 7, 8, 1, 2, 3 };
- /**
- * 利用集合看起来循环次数为:arr1.length + arr2.length,那么真的提高了
- * 速度吗?
- */
- arrayListSort(arr1, arr2);
- System.out.println();
- /**
- * 原始比较,循环次数为:arr1.length*arr2.length,那么它真的比利用集合效果
- * 差吗?
- */
- arrayDoubleFor(arr1, arr2);
- }
- /**
- * arrayListSort<br>
- * Description: 使用List集合.外观看起来循环次数:arr1大小+arr2大小;<br>
- * 但是集合ArrayList类方法contains(Object o)实现依然靠for循环数组,代码为<br>
- *
- * public boolean contains(Object o) {
- * return indexOf(o) >= 0;
- * }
- *
- * public int indexOf(Object o) {
- * if (o == null) {
- * for (int i = 0; i < size; i++)
- * if (elementData[i]==null)
- * return i;
- * } else {
- * for (int i = 0; i < size; i++)
- * if (o.equals(elementData[i]))
- * return i;
- * }
- * return -1;
- * }
- * 上面elementData[]大小为add()的个数,详细请查看ArrayList类.<br>
- *
- * @param arr1
- * @param arr2
- */
- static void arrayListSort(int[] arr1, int[] arr2) {
- List list = new ArrayList();
- for (int i = 0, n = arr1.length; i < n; i++) {
- list.add(arr1[i]);
- }
- for (int i = 0, n = arr2.length; i < n; i++) {
- int tmp = arr2[i];
- if (list.contains(tmp)) {// ArrayList.contains(Object o)
- System.out.println(tmp);
- }
- }
- }
- /**
- * arrayDoubleFor<br>
- * Description: 原始数组比较方式
- *
- * @param arr1
- * @param arr2
- */
- static void arrayDoubleFor(int[] arr1, int[] arr2) {
- for (int i = 0, n = arr1.length; i < n; i++) {
- int a = arr1[i];
- for (int j = 0, m = arr2.length; j < m; j++) {
- int b = arr2[j];
- if (a == b) {
- System.out.println(a);
- }
- }
- }
- }
- }
本文出自 “走�M地铁等�L景” 博客,请务必保留此出处http://cnctocn.blog.51cto.com/4183095/837508