Java的ArrayList排序
利用集合的默认排序
//利用arraylist数组进行排序
//1.整数
ArrayList<Integer> ay = new ArrayList<>();
ay.add(8);
ay.add(2);
ay.add(4);
ay.add(5);
ay.add(3);
ay.add(6);
ay.add(7);
ay.add(8);
//利用集合的排序工具,默认排序
Collections.sort(ay);
//使用for循环输出
for (int i = 0; i < ay.size(); i++) {
System.out.print(ay.get(i));
}
输出结果为:23456788;
这种情况下系统默认的排序是升序的,但是可以利用比较器来控制输出的排序方式
再加上集合的比较器进行排序
//自我选择式排序
Collections.sort(ay, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 < o2) return 1;
else if (o1 > o2) return -1;
return 0;
}
});
//使用for循环输出
for (int i = 0; i < ay.size(); i++) {
System.out.print(ay.get(i));
}
输出结果为:88765432;
这样就改变了排序的顺序
数组中对象排序,以及double类型数据排序
//创建一个学生类,读取文件内容时,经行保存,方便排序
private static class Students{
public String Name;
public String Number;
public double Score;
Students(String a, String b, double c)
{
Name = a;
Number = b;
Score = c;
}
}
//排序, 用Arraylist的排序工具
Collections.sort(Stu, new Comparator<Students>() {
@Override
public int compare(Students o1, Students o2) {
if (o2.Score - o1.Score > 0)//double值返回不了,巧妙一点就ok
{
return 1;
}
else if (o2.Score - o1.Score > 0)
{
return -1;
}
return 0;
}
});
这是构造的类进行排序,属于编程中常常遇到的。
利用这个排序器,根据想要的排序依据来进行排序
最后就是这个排序器的返回值修改问题了
为什么要改成这样,因为直接写是不行的!
这种排序方式中,只能返回int类型的值
而如若我们进行强制类型转化,会丢失精度,导致排序错误
eg:1.2和1.3在排序器中进行排序,是无法辨别的。
因为在强制转化为double时,得到的值为0;