Java 我如何根据学生的分数对他们的名字进行排序?

Java 我如何根据学生的分数对他们的名字进行排序?,java,sorting,hashmap,Java,Sorting,Hashmap,我如何根据学生的分数对他们的名字进行排序?提供学生成绩。我可以使用java中的Collection类进行排序吗?我应该导入什么东西吗 import java.util.*; class ShortRecord { public static void main(String args[]) { // Create a hash map HashMap hm = new HashMap(); // Put elements to the map

我如何根据学生的分数对他们的名字进行排序?提供学生成绩。我可以使用java中的
Collection
类进行排序吗?我应该导入什么东西吗

import java.util.*;

class ShortRecord {

   public static void main(String args[]) {

      // Create a hash map
      HashMap hm = new HashMap();
      // Put elements to the map
      hm.put("Zara", new Double(3434.34));
      hm.put("Mahnaz", new Double(123.22));
      hm.put("Ayan", new Double(1378.00));
      hm.put("Daisy", new Double(99.22));
      hm.put("Qadir", new Double(-19.08));

      // Get a set of the entries
      Set set = hm.entrySet();
      // Get an iterator
      Iterator i = set.iterator();
      // Display elements
      while (i.hasNext()) {
         System.out.print(me.getKey() + ": ");
         System.out.println(me.getValue());
      }

   }
}

如果要按地图的键(即名称)排序,请使用


如果您想根据值进行排序,那么请参见

我认为您应该创建一个POJO
Student
类,并实现-然后将这些
Student
放在a中,然后执行它。比如

static class Student implements Comparable<Student> {
  public Student(String name, double grade) {
    this.name = name;
    this.grade = grade;
  }

  String name;
  double grade;

  @Override
  public int compareTo(Student o) {
    if (o == null) {
      return -1;
    }
    int c = Double.valueOf(grade).compareTo(o.grade);
    if (c != 0) {
      return c;
    }
    return name.compareTo(o.name);
  }

  @Override
  public String toString() {
    return String.format("%s has grade %.2f", name, grade);
  }
}

public static void main(String[] args) {
  List<Student> al = new ArrayList<>();
  al.add(new Student("Zara", 3434.34));
  al.add(new Student("Mahnaz", 123.22));
  al.add(new Student("Ayan", 1378.00));
  al.add(new Student("Daisy", 99.22));
  al.add(new Student("Qadir", -19.08));
  Collections.sort(al);
  System.out.println(al);
}

这次使用自定义比较器的另一个示例:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Marks
{
    static class SortByMark implements Comparator<Student>
    {
        @Override
        public int compare(Student studentOne, Student studentTwo)
        {
            return studentOne.mark.compareTo(studentTwo.mark);
        }
    }

    static class Student
    {
        private final Double mark;
        private final String name;

        public Student(String name, Double mark)
        {
            this.name = name;
            this.mark = mark;
        }

        public Double getMark()
        {
            return mark;
        }

        public String getName()
        {
            return name;
        }

        @Override
        public String toString()
        {
            return name + ": " + mark;
        }
    }

    private final static SortByMark sortByMark = new SortByMark();;

    public static void main(String args[])
    {
        List<Student> students = new ArrayList<Student>();

        students.add(new Student("Zara", new Double(3434.34)));
        students.add(new Student("Mahnaz", new Double(123.22)));
        students.add(new Student("Ayan", new Double(1378.00)));
        students.add(new Student("Daisy", new Double(99.22)));
        students.add(new Student("Qadir", new Double(-19.08)));

        Collections.sort(students, sortByMark);

        for (Student student : students)
        {
            System.out.println(student);
        }
    }
}
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
公开课分数
{
静态类SortByMark实现了Comparator
{
@凌驾
公共整数比较(学生一、学生二)
{
返回studentOne.mark.compareTo(studentTwo.mark);
}
}
静态班学生
{
私人最终双标记;
私有最终字符串名;
公立学生(字符串名称,双标记)
{
this.name=名称;
这个。马克=马克;
}
公共双getMark()
{
返回标记;
}
公共字符串getName()
{
返回名称;
}
@凌驾
公共字符串toString()
{
返回名称+“:”+标记;
}
}
私有最终静态SortByMark SortByMark=新SortByMark();;
公共静态void main(字符串参数[])
{
List students=new ArrayList();
增加(新学生(“Zara”,新双(3434.34));
增加(新学生(“Mahnaz”,新双人(123.22));
增加(新学生(“阿扬”,新双(1378.00));
学生。加上(新学生(“黛西”,新双人(99.22));
增加(新学生(“Qadir”,新双(-19.08));
集合。排序(学生、排序标记);
用于(学生:学生)
{
系统输出打印(学生);
}
}
}

如果您想要排序,那么您应该查看
Comparable
Comparator
接口。这里我想根据他们提供的帐户余额来缩短名称。如果您想要按地图键排序,那么使用java.util.TreeMap。如果您想根据值进行排序,请参见?@user3809570提供一个sampleSombody有一个否定标记?评论多于回答这个问题已经回答了,它是重复的。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Marks
{
    static class SortByMark implements Comparator<Student>
    {
        @Override
        public int compare(Student studentOne, Student studentTwo)
        {
            return studentOne.mark.compareTo(studentTwo.mark);
        }
    }

    static class Student
    {
        private final Double mark;
        private final String name;

        public Student(String name, Double mark)
        {
            this.name = name;
            this.mark = mark;
        }

        public Double getMark()
        {
            return mark;
        }

        public String getName()
        {
            return name;
        }

        @Override
        public String toString()
        {
            return name + ": " + mark;
        }
    }

    private final static SortByMark sortByMark = new SortByMark();;

    public static void main(String args[])
    {
        List<Student> students = new ArrayList<Student>();

        students.add(new Student("Zara", new Double(3434.34)));
        students.add(new Student("Mahnaz", new Double(123.22)));
        students.add(new Student("Ayan", new Double(1378.00)));
        students.add(new Student("Daisy", new Double(99.22)));
        students.add(new Student("Qadir", new Double(-19.08)));

        Collections.sort(students, sortByMark);

        for (Student student : students)
        {
            System.out.println(student);
        }
    }
}