2011-11-10 95 views
1

在我學習Java的任務中,我遇到了一個疑問。基於三列的Java排序數組

對於排列一維數組,我們可以使用Arrays.sort(),但是如果我想根據三列對二維數組進行排序?有沒有任何選擇,或我必須爲自己編碼(像三個嵌套循環)?

下面是一個例子輸入:

13 2 28 36 
1 4 56 17 
4 2 5 40 
2 4 41 55 
9 5 48 12 
19 2 25 12 
20 5 13 8 
15 3 51 30 
12 5 39 59 
17 3 56 40 
3 1 56 46 
7 3 28 51 
8 5 14 58 
5 3 34 15 
14 4 53 2 
18 4 38 57 
6 2 16 25 
16 3 17 13 
10 5 41 33 
11 1 13 57 

列是int和這個被存儲在整數的數組。

我想的排序通過柱2,如果相等數目被發現,然後按列排序3和最後,如果等於發現,排序列3.

輸出應該是這樣的:

11 1 13 57 
3 1 56 46 
4 2 5 40 
6 2 16 25 
19 2 25 12 
13 2 28 36 
16 3 17 13 
7 3 28 51 
5 3 34 15 
15 3 51 30 
17 3 56 40 
18 4 38 57 
2 4 41 55 
14 4 53 2 
1 4 56 17 
20 5 13 8 
8 5 14 58 
12 5 39 59 
10 5 41 33 
9 5 48 12 

有沒有簡單的方法來做到這一點?請記住,我是Java新手。

問候,

Favolas

+0

比較如何呈現給你這個數據? – DerMike

+0

對不起。我的錯。忘記最後一列(雙打)它是一個整數數組。編輯初始職位 – Favolas

回答

2

簡單使用Comparator和使用Arrays.sort(arr, comparator);

+0

嗨。試圖瞭解,但不幸的是沒有能力。儘管如此,非常感謝。 – Favolas

+0

比較器是自定義類,它將使您能夠在自己的方式上比較數組元素,以便解決您的問題 –

1

這取決於你如何獲取數據。

一般來說,你可以給自己ComparatorCollections.sort

+0

參見也在番石榴訂購 – 2011-11-10 10:43:13

0

對數組的數組實現的比較似乎有點危險了我,因爲你必須手動保證,在第二維度所有數組的長度是相同的和語義數組的組件必須始終保持一致 - 對於這些類型的約束,應該使用對象。

如果數組中的第二個維有一些含義(即它總是四個因素,三個是座標,第四個是數值),您應該考慮不要將它建模爲數組的數組,而是將數組四個成員變量(例如xCoord,yCoord,zCoord和value)。然後,您可以使此類實現Comparable接口並實施compareTo方法。然後Arrays.sort()方法將根據給定的compareTo方法進行排序。

1

使用下面

class MyArrayComparator implements Comparator<Integer[]> { 

    @Override 
    public int compare(Integer[] o1, Integer[] o2) { 
    if (o1[1] == o2[1]) { 
     if (o1[2] == o2[2]) { 
     return o1[3].compareTo(o2[3]); 
     } 
     else { 
     return o1[2].compareTo(o2[2]); 
     } 
    } 
    return o1[1].compareTo(o2[1]); 
    } 

} 

使用下面的排序方法

Collections.sort(yourListOfArry, new MyArrayComparator()); 
+0

+1:它也可以是一個'int []',它可能更有效。 –

+0

@Kowser感謝您的回答。完成你在main [this](http://pastebin.com/hAKVz1bW)上創建和創建的類[this](http://pastebin.com/xEzLyLGH),但是它給了我錯誤...... – Favolas

+0

什麼錯誤?'IndexOutOfBound'?你傳遞一個數組列表嗎?如果你可以發佈,你是如何控制你的數組的話,這可能會有所幫助。 – Kowser