Java中怎样将类对象自动排序,放入某个集合
2015-12-30 09:30
471 查看
需求:某一个类对象放入一个集合时,就按照类对象的参数(或者自定义的功能)自动排序,使用的时候不用另外调用集合的sort函数。
可以实现此功能的集合:TreeSet,TreeMap。
原理:这两个集合提供了相应的构造函数:
Set<HomeAutodeviceObjectNew>testSet=newTreeSet<HomeAutodeviceObjectNew>(
newStringSizeComparator());
classStringSizeComparator
implementsComparator<HomeAutodeviceObjectNew>{
@Override
public
intcompare(HomeAutodeviceObjectNewarg0,HomeAutodeviceObjectNewarg1){
if((arg0.GetArributeValue(arg0.GetSortClusterID(),arg0.GetSortAttrID())-arg1
.GetArributeValue(arg1.GetSortClusterID(),arg1.GetSortAttrID()))>0)
return1;
else
if((arg0.GetArributeValue(arg0.GetSortClusterID(),arg0.GetSortAttrID())-arg1
.GetArributeValue(arg1.GetSortClusterID(),arg1.GetSortAttrID()))<0)
return-1;
return0;
}
验证方法:
Iterator<HomeAutodeviceObjectNew>it=testSet.iterator();
while(it.hasNext()){
HomeAutodeviceObjectNewtempdevice=it.next();
System.out.println(tempdevice.GetArributeValue(tempdevice.GetSortClusterID(),
tempdevice.GetSortAttrID())+
"..");
}
结果:按照属性的value值进行从小到大的排序。
注意:Set会删除重复的对象,如果compare的return值为0,则会认为是同一个对象。
如果确实需要将数据相等的对象也放在set里,可以修改Comparator类:
classStringSizeComparatorimplementsComparator<HomeAutodeviceObjectNew>{
@Override
publicintcompare(HomeAutodeviceObjectNewarg0,HomeAutodeviceObjectNewarg1){
if((arg0.GetArributeValue(arg0.GetSortClusterID(),arg0.GetSortAttrID())-arg1
.GetArributeValue(arg1.GetSortClusterID(),arg1.GetSortAttrID()))>=
0)
return1;
elseif((arg0.GetArributeValue(arg0.GetSortClusterID(),arg0.GetSortAttrID())-arg1
.GetArributeValue(arg1.GetSortClusterID(),arg1.GetSortAttrID()))<0)
return-1;
return0;
}
可以实现此功能的集合:TreeSet,TreeMap。
原理:这两个集合提供了相应的构造函数:
TreeSet
(Comparator<?super E>comparator)
TreeMap
(Comparator<?super K>comparator)
举例:
Set<HomeAutodeviceObjectNew>testSet=newTreeSet<HomeAutodeviceObjectNew>(
newStringSizeComparator());
classStringSizeComparator
implementsComparator<HomeAutodeviceObjectNew>{
@Override
public
intcompare(HomeAutodeviceObjectNewarg0,HomeAutodeviceObjectNewarg1){
if((arg0.GetArributeValue(arg0.GetSortClusterID(),arg0.GetSortAttrID())-arg1
.GetArributeValue(arg1.GetSortClusterID(),arg1.GetSortAttrID()))>0)
return1;
else
if((arg0.GetArributeValue(arg0.GetSortClusterID(),arg0.GetSortAttrID())-arg1
.GetArributeValue(arg1.GetSortClusterID(),arg1.GetSortAttrID()))<0)
return-1;
return0;
}
验证方法:
Iterator<HomeAutodeviceObjectNew>it=testSet.iterator();
while(it.hasNext()){
HomeAutodeviceObjectNewtempdevice=it.next();
System.out.println(tempdevice.GetArributeValue(tempdevice.GetSortClusterID(),
tempdevice.GetSortAttrID())+
"..");
}
结果:按照属性的value值进行从小到大的排序。
注意:Set会删除重复的对象,如果compare的return值为0,则会认为是同一个对象。
如果确实需要将数据相等的对象也放在set里,可以修改Comparator类:
classStringSizeComparatorimplementsComparator<HomeAutodeviceObjectNew>{
@Override
publicintcompare(HomeAutodeviceObjectNewarg0,HomeAutodeviceObjectNewarg1){
if((arg0.GetArributeValue(arg0.GetSortClusterID(),arg0.GetSortAttrID())-arg1
.GetArributeValue(arg1.GetSortClusterID(),arg1.GetSortAttrID()))>=
0)
return1;
elseif((arg0.GetArributeValue(arg0.GetSortClusterID(),arg0.GetSortAttrID())-arg1
.GetArributeValue(arg1.GetSortClusterID(),arg1.GetSortAttrID()))<0)
return-1;
return0;
}
相关文章推荐
- java转换unicode,筛选文件中的insert语句并把日期给转换为可以直接在数据库执行的语句
- FileUpload——在Struts2中上传文件
- Struts2常用标签
- Spring学习详解(1)——Spring入门详解
- Spring学习详解(1)——Spring入门详解
- JAVA加载外部资源库
- Spring整合JMS(一)——基于ActiveMQ实现
- Eclipse JAVA代码开发注释全解
- java使用的sqlite下载地址
- Struts
- Java IO vs NIO
- JAVA接口连接-jdk
- Spring学习总结(3)——Spring配置文件详解
- Spring学习总结(3)——Spring配置文件详解
- Spring学习总结(3)——Spring配置文件详解
- Java并发和多线程1:并发框架基本示例
- Java并发和多线程1:并发框架基本示例
- JAVA学习(二):JDK介绍及其结构、用途
- Eclipse Debugging Error: ClassNotFoundException的解决方法(很有用)
- java-map