2013-11-26 98 views
2

我有一個integer列表的整數列表,我想從第一個列表中查看每個數組,並將它與列表列表中的所有前面的數組進行比較。如果數組與之前的數組相同,那麼程序應該輸出「repeat」並停止程序。另外,是否有任何方法來排序數組,以便程序運行速度更快,效率更高?提前致謝。排序和比較整數數組中的Java列表

Arraylist<int[]> numbers = new Arraylist<int[]>(); 

    int[] num1 = new int[]{1,2,3}; 
    int[] num2 = new int[]{2,3,5}; 
    int[] num3 = new int[]{1,2,3}; 
    int[] num4 = new int[]{3,2,6}; 

numbers.add(num1); 
numbers.add(num2); 
numbers.add(num3); 
numbers.add(num4); 

(Sorting to make more efficient and faster) 

(Comparing) 

程序應打印出「重複」,並停止其NUM3比較NUM1後,因爲他們是相同的。

回答

2

把你的陣列放在一個小包裝中,它實現了hashCode()equals()。然後使用add()方法將它們放入HashSet。如果add方法返回false,則表示有重複。

您可以使用Arrays.hashCode作爲返回值hashCode()Arrays.equals(array1, array2)來執行equals()

唯一的事情是,以後要創建一個列表,你將需要檢索Set中的對象,獲取字節數組並將其放入一個列表中。您可以使用List.addAll()將包裝器對象放在列表中。但是,也許你想保持一個Set,取決於進一步的使用。


行了,也許這是一個有點先進的,我做了一個實現你:

public class Dupes { 

    public static class WrappedArray { 
     public WrappedArray(int[] wrapped) { 
      this.wrapped = wrapped; 
     } 

     public int[] getWrapped() { 
      return this.wrapped; 
     } 

     @Override 
     public boolean equals(Object obj) { 
      if (!(obj instanceof WrappedArray)) { 
       return false; 
      } 
      WrappedArray that = (WrappedArray) obj; 
      return Arrays.equals(this.wrapped, that.wrapped); 
     } 

     @Override 
     public int hashCode() { 
      return Arrays.hashCode(wrapped); 
     } 

     private final int[] wrapped; 
    } 

    public static void main(String[] args) { 
     List<int[]> numbers = new ArrayList<int[]>(); 

     int[] num1 = new int[] { 1, 2, 3 }; 
     int[] num2 = new int[] { 2, 3, 5 }; 
     int[] num3 = new int[] { 1, 2, 3 }; 
     int[] num4 = new int[] { 3, 2, 6 }; 

     numbers.add(num1); 
     numbers.add(num2); 
     numbers.add(num3); 
     numbers.add(num4); 

     Set<WrappedArray> wrappedNumberSet = new HashSet<>(); 

     int index = 1; 
     for (int[] number : numbers) { 
      if (!wrappedNumberSet.add(new WrappedArray(number))) { 
       System.out.println("Duplicate num" + index); 
      } 
      index++; 
     } 
    } 
} 
+0

對不起,我是新來的Java,什麼是hashCode()?你如何使用它? – user2654764

+1

對於任何數據對象,Hashcode都返回一個*通常*的值。 'HashSet'使用它來查找值,然後執行'equals'來查看它們是否相同。 –

+0

什麼是HashSet? – user2654764

1

排序內部數組排序,如快速排序。

你可以通過做Arrays.equals(num1,num3)來比較數組; ,這隻有在數組被排序時纔有效。

從Java文檔

「兩個陣列被認爲是相等的,如果兩個陣列包含相同數量的元件,並且在這兩個陣列元件的所有相應對是相等的。換句話說,兩個數組相等,如果他們包含在相同的順序相同的元素「

+0

你確定嗎?我認爲你需要'Arrays.equals()',Java'[I.equals()'直接從Object繼承,換句話說,它比較引用。 –

+0

你是對的。編輯的解決方案。 –