Java中怎么取出数组中某个单位的某个值进行排序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中怎么取出数组中某个单位的某个值进行排序?相关的知识,希望对你有一定的参考价值。

Student[] s=new Student[5];
s[0]=new Student("西西",59,78,80);
s[1]=new Student("小亿",67,78,70);
s[2]=new Student("咚咚",23,84,77);
s[3]=new Student("李济",69,78,73);
s[4]=new Student("冰芳",76,74,71);

比如我要按每个中的最后一个的值进行从高到低顺序依次打印出来s[]数组?要怎么搞?

sort(T[] a, Comparator<? super T> c)

用这个函数,自定义comparator函数实现最后一个值排序

import java.util.Arrays;
import java.util.Comparator;
public class TestDengCha 
 public static void main(String[] agrs) 
  Student[] s = new Student[5];
  s[0] = new Student("西西", 59, 78, 80);
  s[1] = new Student("小亿", 67, 78, 70);
  s[2] = new Student("咚咚", 23, 84, 77);
  s[3] = new Student("李济", 69, 78, 73);
  s[4] = new Student("冰芳", 76, 74, 71);
  Arrays.sort(s, new Comparator<Student>() 
   @Override
   public int compare(Student s1, Student s2) 
    if (s1 != null && s2 != null) 
     return s1.getEnglish() > s2.getEnglish() ? 1 : (s1.getEnglish() == s2.getEnglish() ? 0 : -1);
    
    return 0;
   
  );
  System.out.println(Arrays.toString(s));
 

class Student 
 private String name;
 private int chinese;
 private int math;
 private int english;
 Student(String name, int chinese, int math, int english) 
  this.name = name;
  this.chinese = chinese;
  this.english = english;
 
 public String getName() 
  return name;
 
 public void setName(String name) 
  this.name = name;
 
 public int getChinese() 
  return chinese;
 
 public void setChinese(int chinese) 
  this.chinese = chinese;
 
 public int getMath() 
  return math;
 
 public void setMath(int math) 
  this.math = math;
 
 public int getEnglish() 
  return english;
 
 public void setEnglish(int english) 
  this.english = english;
 
 @Override
 public String toString() 
  return "姓名:" + name + " 语文" + chinese + " 数学" + math + " 英语" + english;
 

参考技术A Collections 类的方法 sort
public static <T> void sort(List<T> list,
Comparator<? super T> c)

根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须可使用指定比较器相互比较(也就是说,对于列表中的任意
e1 和 e2 元素,c.compare(e1, e2) 不得抛出
ClassCastException)。
此排序被保证是稳定的:不会因调用 sort 而对相等的元素进行重新排序。
排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n) 性能。
指定列表必须是可修改的,但不必是可大小调整的。此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生的
n2 log(n) 性能。

参数:
list - 要排序的列表。
c - 确定列表顺序的比较器。null 值指示应该使用元素的自然顺序。
抛出:
ClassCastException -
如果列表中包含不可使用指定比较器相互比较 的元素。
UnsupportedOperationException
- 如果指定列表的列表迭代器不支持 set 操作。
参考技术B 将你的每一个数组的最后一个数放在num[]整形数组中,然后调用方法
Arrays.sort(num)(升序);

System.out.println("从大到小输出:");
for (int m = num.length-1; m >=0; m--)
System.out.println(num[m]);//从大到小输出

追问

可是你这输出来的 就只有那个数的排序吧?还有别的内容要一起显示出来呢?

参考技术C 数组中的元素现在是一个对象,只要获取对象的属性值,然后对数组进行排序即可。 参考技术D 最后一个数值是Student的什么属性呢?
可以对s[i].属性这个值进行排序,可用冒泡排序

以上是关于Java中怎么取出数组中某个单位的某个值进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

Android-java-如何按对象内的某个值对对象列表进行排序

PHP将二维数组中某个值都取出来组成一个新的数组

数组对象根据 某个字段进行排序

怎么取数组的中间值

怎么在数组中修改一个元素

根据数组中的某个值进行排序