第一种方法
public static int[] Ranking(int[] score) { //临时数组 int[] temp = new int[score.length]; List lis = new ArrayList(); //把不重复的数据放进集合里 for (int x : score) { if (!lis.contains(x)) { lis.add(x); } } //从小到大排序 Collections.sort(lis); //反向排序目的是把最大的放在第一位 Collections.reverse(lis); //真正的名次就是下角标+1 for (int i = 0; i < score.length; i++) { temp[i] = lis.indexOf(score[i]) + 1; } return temp; }如果数组的内容是{1,2,2,2,3} 那么名次是:3,2,2,2,1
有时候会把并列的名次也占位置。如果想要得到的结果是:5,2,2,2,1
那么就是下面的方法了
https://blog.csdn.net/u014298282/article/details/103680770
在这位博主的基础上稍稍改进了点
public class Rank { public static void main(String[] args) { test1(); } private static void test1() { List<Person> list=getList(); list.sort((x,y)->x.getAge()-y.getAge()); //一般来说,分数是按照大小排列的所以增加了下面一行代码,如果需要从小到大排序,下面一行可以去掉 Collections.reverse(list); int a=0,b=Integer.MIN_VALUE,c=0; for (Person person : list) { if (person.getAge().equals(b)){ c++; }else { b=person.getAge(); a=a+c+1; c=0; } person.setRank(a); } //上面的list是根据年龄由大到小或者有小到大排序的,打乱了原来的顺序。 //如果不需要打乱人名,那么就再次循环赋值一下 List<Person> list1 = getList(); for (Person p1: list1){ for (Person p: list){ if (p1.name.equals(p.name)){ p1.setRank(p.getRank()); } } } for (Person person : list1){ System.out.println(person); } } private static List<Person> getList() { ArrayList<Person> list = new ArrayList<>(); list.add(new Person("张三", 20)); list.add(new Person("李四", 50)); list.add(new Person("王五", 25)); list.add(new Person("赵六", 25)); list.add(new Person("marry", 35)); list.add(new Person("jack", 35)); list.add(new Person("ashe", 35)); return list; } @Data static class Person { private String name; private Integer age; private Integer rank; public Person(String name, Integer age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", rank=" + rank + '}'; } } }输出的结果如下:
Person{name='张三', age=20, rank=7} Person{name='李四', age=50, rank=1} Person{name='王五', age=25, rank=5} Person{name='赵六', age=25, rank=5} Person{name='marry', age=35, rank=2} Person{name='jack', age=35, rank=2} Person{name='ashe', age=35, rank=2}