【问题标题】:Java String ArrayJava 字符串数组
【发布时间】:2012-11-29 14:46:59
【问题描述】:

我有两个数组

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中有什么排序方法吗?

【问题讨论】:

  • 你试过什么?你应该使用其他一些数据结构。您不能根据排序的第一个数组排列第二个数组的元素。可能是您需要的Map
  • @Rohit:当然可以,只是您不想这样做。此外,当您考虑到有一个地图可以保持其键排序时,您对 Map 的想法要好得多:TreeMap
  • @MarkPeters.. 好吧,实际上cannot 我的意思是这还不够feasible 解决方案。这就像在modern world 中生活Ancient life

标签: java android sorting


【解决方案1】:

最简单的方法是以某种方式将 2 条数据链接在一起,而不是将它们放在单独的数组中。许多人建议了一个很好用的地图。根据您要执行的操作,我还将考虑一个具有 2 个实现 Comparable 的变量的新类。如果没有为 Collections.sort 提供不同的 Comparator 以供使用,则 Comparable 定义类在 Collection(在本例中为数组)中时的自然顺序。它看起来像这样:

    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 方法访问另一个字符串。如果在某些情况下需要用新的比较器覆盖自然顺序(例如,按 stringTwo 排序),此实现还将使其在未来变得简单(请参阅策略设计)。

【讨论】:

    【解决方案2】:

    由于您有 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&lt;T&gt; 接口,Collections sorting mechanisms 将使用该接口。

    【讨论】:

    • +1,我发现 Pair 是一个非常有用的抽象。实现一个“zip”实用方法将两个集合组合成一个 Pairs 集合(反之,“解压缩”)也是值得的。
    【解决方案3】:

    在 Java 中没有直接执行此操作的方法。你有两个选择。

    1) 定义一个Map&lt;String, String&gt;,将所有对放入其中(如 ("11", "a"))。对第一个数组(或地图的键)进行排序并按该顺序检索地图的元素。

    2) 创建一个包含每个par 的对象,用它创建一个List,并仅按数字进行比较(实现Comparable 或创建Comparator)。

    【讨论】:

      【解决方案4】:

      您需要注意的一个问题是字符串不会按照与整数相同的规则进行排序。如果您将排序所依据的数组保留为 String,您可能会对所得到的结果感到惊讶。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 2014-12-15
        • 2018-08-10
        • 2012-04-20
        • 2013-05-07
        • 1970-01-01
        相关资源
        最近更新 更多