您的位置:首页 > 编程语言 > Java开发

Java中怎样将类对象自动排序,放入某个集合

2015-12-30 09:30 471 查看
需求:某一个类对象放入一个集合时,就按照类对象的参数(或者自定义的功能)自动排序,使用的时候不用另外调用集合的sort函数。

可以实现此功能的集合:TreeSet,TreeMap。

原理:这两个集合提供了相应的构造函数:

TreeSet
(Comparator<?super
E>comparator)


TreeMap
(Comparator<?super
K>comparator)




举例:




Set<HomeAutodeviceObjectNew>testSet=newTreeSet<HomeAutodeviceObjectNew>(
newStringSizeComparator());

classStringSizeComparator
implementsComparator<HomeAutodeviceObjectNew>{

@Override
public
int
compare(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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: