2012-11-29 60 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

您需要注意的一个问题是,字符串不按照与整数相同的规则进行排序。如果您离开按字符串排序的数组,您很可能会对此感到惊讶。