Java 如何对二维字符串数组进行排序?

Java 如何对二维字符串数组进行排序?,java,arrays,sorting,multidimensional-array,comparator,Java,Arrays,Sorting,Multidimensional Array,Comparator,你怎么分类 String [][] Array11= {{array[i]},{array2[i]},{array3[i]}}; 关于我尝试工作的简要说明: 数组包含学生ID号 array2包含学生姓名 阵列3包含学生课程。 它们都是字符串数组 如果我输入: 1: 身份证号码:5 姓名:A 课程:CS 2: 身份证号码:3 姓名:B 课程:IT 我应该按照它的ID号对它进行排序,这样输出就会如下所示 身份证号码姓名课程 3 B它 5 A CS 或者,如果您对如何使其工作有任何其他建议,请帮助

你怎么分类

String  [][] Array11= {{array[i]},{array2[i]},{array3[i]}};
关于我尝试工作的简要说明: 数组包含学生ID号 array2包含学生姓名 阵列3包含学生课程。 它们都是字符串数组

如果我输入:

1: 身份证号码:5 姓名:A 课程:CS

2: 身份证号码:3 姓名:B 课程:IT

我应该按照它的ID号对它进行排序,这样输出就会如下所示

身份证号码姓名课程 3 B它 5 A CS


或者,如果您对如何使其工作有任何其他建议,请帮助我。:)

您需要创建一个自定义的
比较器

检查它提供了两种方法:

  • 创建自定义比较器以按给定索引对数组进行排序
  • 只需指定要排序的列的索引,即可将
    ColumnParator
    用作可重用的比较器

  • 或者更好的设计是创建一个自定义的Student对象来存储学生的属性(Id、姓名、课程),然后您可以使用对类中的任何属性进行排序。

    您应该将2D字符串数组替换为
    Student
    s的1D数组,在该数组中创建一个具有属性的
    Student
    类“id”、“姓名”和“课程”


    然后创建一个实现
    Comparator
    的类,比如
    StudentComparator
    。它的
    compare
    方法应该返回一个负数、
    0
    ,或者一个正数,这取决于第一个
    Student
    与第二个
    Student
    的比较是小于、等于还是大于。

    您存储数据的方式不合适。我建议您为您的学生定义一个实现Comparable.Then overide compareTo()函数的类,以便通过课程id进行比较

     public class Student implements Comparable<Student >
     {
      public  int id;
      public  String name;
      public  String course;
    
      public int compareTo(Student s)
      {
         if(s ==null)
           return 1;
    
        return id - s.id;
      }
    
     }
    
    现在,您可以使用Arrays实用程序排序方法进行排序:

    Arrays.sort(studentsList);
    

    注意:如果您想使用不同的数据结构,那么我建议使用ArrayList而不是数组。

    最好的方法是停止假装使用C,开始实际使用Java

    步骤1:创建一个包含学生id、学生姓名和学生课程的对象

    步骤2:将这些对象存储在有意义的集合(数组、列表、其他)中

    步骤3;对集合进行排序

    下面是一些代码:

    public class StudentBlam implements Comparable<StudentBlam>
    {
        private final String course;
        private final String id;
        private final String name;
    
        public StudentBlam(
            final String course,
            final String id,
            final String name)
        {
            this.course = course;
            this.id = id;
            this.name = name;
        }
    
        @Override
        public int compareTo(final StudentBlam other)
        {
            return id.compareTo(other.getId());
        }
    
        public String getCourse()
        {
            return course;
        }
    
        public String getId()
        {
            return id;
        }
    
        public String getName()
        {
            return name;
        }
    }
    
    public class StudentBlam实现可比性
    {
    私人最后弦乐课程;
    私有最终字符串id;
    私有最终字符串名;
    公立学生(
    最后的弦乐课程,
    最终字符串id,
    最终字符串名)
    {
    本课程=课程;
    this.id=id;
    this.name=名称;
    }
    @凌驾
    公共int比较(最终学生归咎于其他)
    {
    返回id.compareTo(other.getId());
    }
    公共字符串getCourse()
    {
    返回路线;
    }
    公共字符串getId()
    {
    返回id;
    }
    公共字符串getName()
    {
    返回名称;
    }
    }
    
    将数据存储在2d数组中有什么原因吗?鉴于行似乎是不同的数据,最好将该数据存储在实际对象中,然后创建一个对象数组。将数据存储在2d数组中会混淆其中包含的实际数据。
    public class StudentBlam implements Comparable<StudentBlam>
    {
        private final String course;
        private final String id;
        private final String name;
    
        public StudentBlam(
            final String course,
            final String id,
            final String name)
        {
            this.course = course;
            this.id = id;
            this.name = name;
        }
    
        @Override
        public int compareTo(final StudentBlam other)
        {
            return id.compareTo(other.getId());
        }
    
        public String getCourse()
        {
            return course;
        }
    
        public String getId()
        {
            return id;
        }
    
        public String getName()
        {
            return name;
        }
    }