java自定义对象数组进行排序
如何对java语言进行自定义排序对
下面来来解释一下Java 中如何对自定义对象数组进行排序,是有两种方式进行排序
第一种方式是将排序方式放到需要比较的类中,第二种方式,是单独定义实现一个排序类
第一种方法
调用的排序的语句是Collections.sort(list),下面来讲一下如何实现。
需要用到两样东西,从调用的语句中,可以看出:
- Collections.sort()
- list
Collections.sort()是java的包中的,只要引入包即可import java.util.Collections即可
而list则是对象数组,这个类比较特殊,需要继承compareable接口中的compareTo抽象方法,为什么一定要继承这个抽象方法,我感觉应该是Collections.sort()会自动调用这个类中的这个方法。
那么怎么去继承这个接口,这里就给出了一个Student类的例子
class Test implements Comparable<Test>{
int id;
int ids;
Test(int id){
this.id=id;
}
public int compareTo(Test test ){
return this.id - test.id; // 从小到大
}
//如果写成if语句的话,那么就是如果返回正数的,就会交换两个数据的位置
}
第二种方法
需要调用的语句为Collections.sort(ArrayList,排序依据),最主要的就是list对象数组 ,这个数组里面都是
需要用到三个东西 一个排序方法 一个排序对象 一个排序依据
这里分别讲一下 如何进行排序 有可调整大小的数组ArrayList
排序方法?主要是Collections.sort(ArrayList,排序依据)
排序对象?ArrayList
排序依据这里就是一个专门用来排序的类 这里就简称排序类,排序类这里面也就只有一个排序方法,而这个类也是继承于排序Compare接口的。
这里就简单的来实现一下
首先需要定义一个自定义对象类
class Test {
int id;
int ids;
Test(int id){
this.id=id;
}
}
对象类定义好后,就需要定义一个ArrayList()类 这个就是利用ArrayList类的定义方式
ArrayList list = new ArrayList();// 其中,<>里面放置的就是类的类型
现在需要定义一个比较类,而这个比较类需要继承的是 Comparator
class SortById implements Comparator<Test> {
public int compare( Test o1, Test o2) {
if(o1.id>o2.id){
return 1;
}
else{
return -1;
}
}
}
为什么需要用到比较类的比较方法,很简单因为在系统执行ArrayList()的时候会自动掉用这个比较类中的比较方法,所以不能改变只能继承比较类,重载这个方法
然后现在需要被排序的类好了,比较类也好了。只要调用ArrayList.sort(Array,排序依据)即可
及
Collections.sort(list, new SortById());
小结
java种排序的方法就是靠Collections.sort来实现的,但是有两种实现方式,就是通过两种接口方式
- Comparator接口,这个接口是用于单独实现一个排序类而这个排序类中的排序方法是返回负数的时候进行排序
- Compare 接口,这个接口是与需要排序的对象的类放在一起,返回负数的时候排序。
python自定义排序
python自定义排序很简单,用到的就是sorted(iterable, key=None, reverse=False)来实现排序,现在来说明一下这个里面的三个元素
- soted()是python的内置函数
- iterable是一个可迭代对象
- key是一个参数放置一个函数,这个函数的特点是传入可迭代对象中的元素,返回需要排序的元素
- reverse是是否需要将得到的排好的可迭代对象进行倒置
下面来看一个例子
import random
class Test():
def __init__(self,data):
self.data=data
def paixu(test):
return test.data
if __name__=="__main__":
li=[]
for i in range(1,10):
li.append(Test(random.randint(1,100)))
li=sorted(li,key=paixu)
for l in li:
print(l.data)
pass
4
10
26
33
37
39
60
62
76
[Finished in 0.3s]