2012-11-29 57 views
2

我有兩個陣列Java的String數組

String a[]={"11","02","43","24","05","86","37","28","29","10"}; 
String b[]={"a","c","f","q","w","x","z","x","s","r"}; 

我想排序數組a []按升序

,結果可能喜歡

String a[]={"02","05","10","11","24","28","29","37","43","86"}; 
String b[]={"c","w","r","a","q","x","s","z","f","x"}; 

我怎樣才能得到像以上使用java? 在java中可用的任何排序方法?

+3

你有什麼試過?你應該使用其他一些數據結構。根據排序後的第一個數組,不能排列第二個數組的元素。可能是您需要的「地圖」。 –

+1

@Rohit:當然可以,你只是不想。當你考慮有一個映射保持鍵排序的時候,'Map'的想法也會更好:'TreeMap'。 –

+0

@MarkPeters ..那麼,實際上'cannot'我的意思是這不是'可行'的解決方案。這就像在「現代世界」中過着「古老的生活」一樣。 –

回答

5

最簡單的方法是將兩段數據以某種方式鏈接在一起,而不是將它們分別放在不同的數組中。許多人提出了一個效果很好的地圖。根據你想要做什麼,我也會考慮一個新的類,其中有兩個實現Comparable的變量。 Comparable定義了一個類在Collection中的自然順序(在這個實例中是一個數組),如果Collections.sort沒有被賦予一個不同的比較器使用。這將是這個樣子:

public class Data implements Comparable{ 
    private String stringOne; 
    private String stringTwo; 

    @Override 
    public int compareTo(Object obj) { 
     stringOne.compareTo((String)obj); 
    } 

別的地方調用:

Collections.sort(locationOfDataCollection); 

然後,您可以創建數據的一個集合,並用getter方法訪問其他字符串。如果在某些情況下需要使用新比較器覆蓋自然順序(例如,按字符串排序),則此實現還可以使其在未來變得簡單(請參閱策略設計)。

+0

+1,很好的解釋。 – dreamcrash

0

在Java中沒有直接執行此操作的方法。你有兩個選擇。

1)定義一個Map<String, String>,把所有的對(如(「11」,「a」))。對第一個數組(或地圖的鍵)進行排序,並按照該順序檢索地圖的元素。

2)創建一個包含每個參數的對象,創建一個List並按照數字進行排序(實現Comparable或創建Comparator)。

4

既然你有2個相關組數據,我要麼通過Pair<String,String>類型的對象,這些鏈接,然後進入一個List<Pair>,或者把它們放在一個Map<String,String>

也許第一種解決方案更直觀,

public class Pair implements Comparable<Pair> { 
    public String first; 
    public String second; 

    // equals/hashcode etc. 
} 

一旦它們處於標準Java集合中,就有很多解決這些問題的解決方案。例如在上面的Pair我已經實現了Comparable<T>接口,其中Collections sorting mechanisms將利用。

+0

+1,我發現Pair是非常有用的抽象。實現一個「zip」實用程序方法將兩個集合合併到一個對的集合中也是值得的(反過來,「unzip」)。 – ach

0

您需要注意的一個問題是,字符串不按照與整數相同的規則進行排序。如果您離開按字符串排序的數組,您很可能會對此感到驚訝。