【问题标题】:Sorting multidimensional array in java without using collections在不使用集合的情况下在java中对多维数组进行排序
【发布时间】:2014-07-11 10:00:30
【问题描述】:
String Name[][]={
    {"prakash","kumar"},
    {"raj","kappor"},
    {"vinod","bhart"},
    {"yraj","tkappor"},                         
    {"avinod","fbhart"}
};

我们可以先排序这个字符串数组 surname,然后 firstname 而不使用集合吗?

【问题讨论】:

  • 答案是Yes。如果您提供有关您尝试的更多详细信息,您可以获得更好的答案。

标签: java sorting multidimensional-array


【解决方案1】:

您可以使用<T> Arrays.sort(T[] a, Comparator<? super T> c)(请参阅here)对通用数组进行排序并指定一个自定义比较器,在您的情况下,该比较器通过先查看姓氏然后查看名字来比较两个String[](请参阅Panu's answer用于可能的实现)。

如果您也不想使用Arrays,则必须自己实现排序算法。你可以找到一个很好的排序算法概述here。为了使用您的自定义比较,您必须调整比较方法。

【讨论】:

  • 我尝试了所有可能的方法,但没有使用 Collections 我不知道如何解决这个问题
  • @ChiranjibPatra 你试过使用Arrays.sort?哪部分你不明白?您可以随时编辑问题并添加您尝试过但不起作用的代码。
  • @ChiranjibPatra 嗨 - 您是否考虑过接受答案?
  • 尊敬的先生,非常感谢您的回答。由于一些个人问题,我无法专注于这个话题。对此我深表歉意,我很快就会回来。
【解决方案2】:
Arrays.sort(Name, ComparatorFactory.compareOn(ON.FIRSTNAME));

enum ON {
    FIRSTNAME, LASTNAME, FULLNAME }

class ComparatorFactroy {
    static Comparator compareOn(ON on){
        switch (on) {
            case FIRSTNAME :
                return new Comparator<String[]>() {
                            @Override
                            public int compare(String[] tar) { ... }
                };
            case LASTNAME :
                return.....
            default:
                return ...
            }
}

【讨论】:

    【解决方案3】:

    您可以使用java.util.Arrays 实用程序类对数组进行适当的排序。 在这种情况下,它看起来像这样:

        Arrays.sort(Name, new Comparator<String[]>(){
            int LASTNAME=0, FIRSTNAME=1;
    
            @Override
            public int compare(String[] o1, String[] o2) {
                int c = o1[LASTNAME].compareTo(o2[LASTNAME]);
                if (c != 0) return c;
                return o1[FIRSTNAME].compareTo(o2[FIRSTNAME]);
            }
        });
    

    【讨论】:

    • 我不想使用集合。我尝试了所有可能的方法,但不使用集合我不知道如何解决这个问题
    • 我的回答中不涉及任何收藏。收藏有什么问题?你对我的回答有什么问题?代码是否编译? reaults 错了吗?
    • 亲爱的 Panu,我试过你的代码,但它不能正常工作。就像
    • 如果 a[0][1] 与 a[1][1] 比较 surname 返回相等,那么它会检查 firstnames。感谢您的回答和帮助。但如果你能写出完整的程序,那对我有很大帮助。谢谢你
    • 什么意思?此代码将首先按姓氏对名称进行排序,如果姓氏相等,则顺序由名字确定。这不是你要求的吗?
    【解决方案4】:
    final String[][] data = new String[][] {
                new String[] { "prakash","kumar" },
                new String[] { "raj","kappor" },
                new String[] { "vinod","bhart" },
                new String[] { "yraj","tkappor" },
                new String[] { "avinod","fbhart" }};
    
        Arrays.sort(data, new Comparator<String[]>() {
            @Override
            public int compare(final String[] entry1, final String[] entry2) {
                final String time1 = entry1[0];
                final String time2 = entry2[0];
                return time1.compareTo(time2);
            }
        });
    

    【讨论】:

      【解决方案5】:

      如果你不想使用java的内置排序机制,那么你可以自己实现一个这样的:

          for(int i=0;i<Name.length;i++) {
              for(int j=i+1;j<Name.length;j++) {
                  if(Name[i][1].compareTo(Name[j][1])>0) {
                      String[] temp = Name[i];
                      Name[i] = Name[j];
                      Name[j] = temp;
                  }
              }
          }
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        相关资源
        最近更新 更多