2013-01-10 46 views
-5

如果兩個數組相等,只忽略第一個元素,我必須進行比較。是否有可能在不迭代的情況下達到相同效果比較兩個數組忽略只有開始元素

+2

數組的什麼?我敢打賭你需要迭代 –

+0

沒有迭代數組,你能訪問它的所有元素嗎? – Swapnil

回答

9

您可以使用Arrays.copyOfRange()來獲取子陣列和Arrays.equals()以執行相等性檢查。

請注意,儘管沒有明確的迭代 - 後面還有迭代。

代碼卡:

int arr1[] = { 1,2,3,4 }; 
int arr2[] = { 0,2,3,4 }; 
System.out.println(Arrays.equals(
     Arrays.copyOfRange(arr1, 1, arr1.length), 
     Arrays.copyOfRange(arr2, 1, arr2.length))); 
+0

+1這當然會重複三次。 –

1

不管你怎麼努力,以檢查兩個數組是否相等,你必須檢查每一個element.For,你必須通過遍歷數組訪問所有的元素儘管如此,您可以避免使用一些內置功能手動執行此操作,但在場景後面也會發生相同的邏輯。

0

是的。

讓我們假設你的兩個數組被命名爲A和B.

  1. 創建一個由來自A的所有元素除了 第一個
    System.arraycopy(A, 1, C, 0, A.length();)列C上。
  2. 創建數組D,除了第一個元素外,它由B中的所有元素組成。
  3. 呼叫Arrays.equals()比較C和D.

此外,牢記Renjiths點。

0
String[] array1 = {"hi","hi2"}; 
List<String> temp = new ArrayList<String>(Arrays.asList(array1)); 

String[] array2 = {"hi3","hi2"}; 
List<String> temp2 = new ArrayList<String>(Arrays.asList(array2)); 

boolean condition = temp.subList(1, temp.size()).equals(temp2.subList(1, temp2.size())); 

前面已經指出的阿米特有幕後

0
Arrays.equals(Arrays.asList(array1).subList(1, array1.length), Arrays.asList(array2).subList(1, array2.length)); 

滿足Arrays.equals雖然將使用循環背後迭代。

0

我相信你(或你調用的方法)將不得不遍歷這些數組,因爲數組不是一個對象,也沒有equals方法。

運算符==僅在原始類型的情況下比較值,它在其他情況下比較指針(內存地址)。這意味着只有在兩個數組都是一個且相同的情況下,您纔會變爲真,如果這兩個數組是兩個單獨但相同的數組,則會變爲false。

複製數組的一部分並對它們進行比較將導致數組通過多次迭代,即使它可能不明顯。 (獲得兩個陣列的子陣列每個至少包含1次迭代,再比較一個陣列。)

也就是說,您可以使用1個循環遍歷數組並逐個比較值,從索引1開始跳過第一個元素。在下面的代碼中將對象類型參數替換爲您的陣列類型:

private boolean compareMyArrays(Object[] array1, Object[] array2) { 
    if ((array1 == null) && (array2 == null)) { 
     return true; 
    } 

    if ((array1 == null) || (array2 == null)) { 
     return false; 
    } 

    if (array1.length != array2.length) { 
     return false; 
    } 

    for (int i = 1; i < array1.lenght; i++) { 
     if (!array1[i].equals(array2[i])) { 
      return false; 
     } 
    } 

    return true; 
} 

希望這會有所幫助。

相關問題