/*根据重量排序后,输出帽子颜色
* 举例: 5只小白鼠,重量分别为15 30 5 9 30,帽子颜色依次为CL_RED, CL_BLUE, CL_BLUE, CL_YELLOW, CL_GRAY,
* 则排序后的输出的帽子颜色序列应该为CL_BLUE, CL_YELLOW, CL_RED, CL_BLUE, CL_GRAY。
如果没有小白鼠,输出null。
输入参数:小白鼠数组
* 举例: 5只小白鼠,重量分别为15 30 5 9 30,帽子颜色依次为CL_RED, CL_BLUE, CL_BLUE, CL_YELLOW, CL_GRAY,
* 则排序后的输出的帽子颜色序列应该为CL_BLUE, CL_YELLOW, CL_RED, CL_BLUE, CL_GRAY。
如果没有小白鼠,输出null。
输入参数:小白鼠数组
*/
方法一:
Demo.java
public static MOUSE_COLOR[] sortMouse(Mouse[] mouse )
{
if(mouse == null)
{
return null;
}
Comparator<Mouse> compare = new Comparator<Mouse>()
{
@Override
public int compare(Mouse o1, Mouse o2) {
// TODO Auto-generated method stub
if(o1.weight > o2.weight)
{
return 1;
}
else if(o1.weight < o2.weight)
{
return -1;
}
else
{
return 0;
}
}
};
Arrays.sort(mouse,compare);
MOUSE_COLOR[] result = new MOUSE_COLOR[mouse.length];
for(int i = 0; i < mouse.length; i++)
{
result[i] = mouse[i].color;
}
return result;
}
----------------------------------------------------------------------------------------------------------------------------------------------------------
方法二:Demo.java
public static MOUSE_COLOR[] sortMouse(Mouse[] mouse )
{
if(mouse == null)
{
return null;
}
Arrays.sort(mouse);
MOUSE_COLOR[] result = new MOUSE_COLOR[mouse.length];
for(int i = 0; i < mouse.length; i++)
{
result[i] = mouse[i].color;
}
return result;
}
Mouse.java
public class Mouse implements Comparable<Mouse>{
public int weight;
public MOUSE_COLOR color;
public Mouse()
{
}
public Mouse(int weight,MOUSE_COLOR color)
{
this.weight =weight;
this.color = color;
}
@Override
public int compareTo(Mouse o) {
// TODO Auto-generated method stub
if(this.weight > o.weight)
{
return 1;
}
else if(this.weight < o.weight)
{
return -1;
}
else
{
return 0;
}
}
}
上述方法二的代码在OJ平台上运行时会报错误,
FindBugs
信息
:EQ_COMPARETO_USE_OBJECT_EQUALS。
因为在PriorityQueue.remove方法中,1.5使用的是compareTo方法,而1.6使用的是equals方法,为保证环境升级的时候,受影响最小,需要遵守约定(x.compareTo(y)==0) == (x.equals(y))。即在compareTo函数中return 0时,需要调用equals方法返回true。
解决办法:1.Right click on the class
2.Select Source
3.Generate hashCode() and equals().
-------------------------------------------------------------------------------------------------------------------------------------------------
总结:
类对象数组排序:
方法一: 调用Arrays的一个方法public static <T> void sort(T[] a, Comparator<? super T> c)。后面的参数需要新建一个Comparator对象。
方法二:让对象类实现comparable接口,覆写comparable函数,里面用私有数据来比较大小。