你怎么能排序二维字符串数组?

时间:2014-05-21 17:47:12

标签: java arrays sorting multidimensional-array comparator

如何对此进行排序

String  [][] Array11= {{array[i]},{array2[i]},{array3[i]}};

关于我试图工作的简要说明: 数组包含学生ID号 array2包含学生姓名 array3包含学生课程。 所有这些都是STRING ARRAYS

如果我输入:

1

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

2:

身份证号码:3 姓名:B 当然:IT

我应该按ID号对它进行排序,以便输出看起来像这样

身份证号码名称课程 3 B IT 5 A CS

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

4 个答案:

答案 0 :(得分:2)

您应该使用Student的1D数组替换您的2D字符串数组,在其中创建一个Student类,其中包含属性" id"," name& #34;和"当然"。

然后你创建一个实现Comparator<Student>的类,比如说StudentComparator。其compare方法应返回一个负数,0或一个正数,具体取决于第一个Student与第二个Student的比较是否小于,等于,或者大于。

答案 1 :(得分:0)

您需要创建自定义Comparator

查看Column Comparator它提供了两种方法:

  1. 创建自定义Comparator以按给定索引对数组进行排序
  2. 使用ColumnComparator作为可重用的比较器,只需指定要排序的列的索引。
  3. 或者更好的设计是创建一个自定义学生对象来存储学生的属性(Id,Name,Course),然后你可以使用Bean Comparator来排序班级中的任何属性

答案 2 :(得分:0)

存储数据的方式不合适。我建议你为实现可比较的学生定义一个课程。然后覆盖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;
  }

 }

现在您可以将所有学生存储在ArrayList中,如下所示:

Student [] studentsList = new Student [sizeOfStudent];

现在您可以使用Arrays实用程序排序方法进行排序:

Arrays.sort(studentsList);

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

答案 3 :(得分:0)

执行此操作的最佳方法是停止假装您正在使用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;
    }
}