List排序

刀锋的锋 2009-03-14 04:15:28
我有个list的数据如下:
{[100,10%],[200,4%],[20,60%],[150,5%]}
我要处到的结果是这个list按[]中的乘积排序,因为100*10%=10,200*4%=8,20*60%=12,150*5%=7.5
则结果是:{[150,15%],[200,4%],[100,10%],[20,60%]}
我是这样实现的:
List arrayList=new ArrayList();
List arrayList2=new ArrayList();
List arrayList3=new ArrayList();
Object[] obj={100,10%};
Object[] obj2={200,4%};
Object[] obj3={20,60%};
Object[] obj4={20,60%};
arrayList.add(obj);
arrayList.add(obj2);
arrayList.add(obj3);
arrayList.add(obj4);
for(int i=0;i<arrayList.size();i++)
{
Object[] obj1=(Object[])arrayList.get(i);
arrayList2.add(Double.parseDouble(obj1[0].toString())*Double.parseDouble(obj1[1].toString())*););

}
Double[] aa = new Double[arrayList2.size()];

arrayList2.toArray(aa);
Arrays.sort(aa);
然后再比较aa中的项与arrayList中项中的[]中的两列积相比,arrayList3相等就添加相应的obj[i],这样arrayList3就是我要的结果,可是这样太慢了,请问有没更好的方法,请高手指教。
...全文
150 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
刀锋的锋 2009-03-20
  • 打赏
  • 举报
回复
其实我那方法也可以,就是慢了点。。。
鱼大洋要学习 2009-03-16
  • 打赏
  • 举报
回复
问题似乎解决了。我也来顶一下。
fys249931556 2009-03-14
  • 打赏
  • 举报
回复
问题已解决。。呵呵。mark下
blliy117 2009-03-14
  • 打赏
  • 举报
回复
楼上正解
tiantianzzz 2009-03-14
  • 打赏
  • 举报
回复

public static void main(String[] args) {
List<Number[]> list = new ArrayList<Number[]>();
Number[] n1 = {100,0.1};
Number[] n2 = {200,0.04};
Number[] n3 = {20,0.6};
Number[] n4 = {150,0.05};

list.add(n1);
list.add(n2);
list.add(n3);
list.add(n4);

Collections.sort(list, new Comparator<Number[]>(){
public int compare(Number[] n1, Number[] n2) {
double d = n1[0].intValue()*n1[1].doubleValue() - n2[0].intValue()*n2[1].doubleValue();
if(d>0){
return 1;
}else if(d<0){
return -1;
}else{
return 0;
}
}
});

System.out.println(list.get(0)[0]+":"+list.get(0)[1]);
System.out.println(list.get(1)[0]+":"+list.get(1)[1]);
System.out.println(list.get(2)[0]+":"+list.get(2)[1]);
System.out.println(list.get(3)[0]+":"+list.get(3)[1]);
}
mirzlm 2009-03-14
  • 打赏
  • 举报
回复
来学习
niuxinlong 2009-03-14
  • 打赏
  • 举报
回复
arrayList.add(obj);
试试用这种
arrayList.add(0,obj);
arrayList.add(1,obj2);
arrayList.add(2,obj3);
arrayList.add(3,obj4);
Landor2004 2009-03-14
  • 打赏
  • 举报
回复
看着挺复杂的,不过list的排序功能很强大,请看这里
http://hi.baidu.com/landor2004/blog/item/d58412112db26415b9127b00.html

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧