id       name   score1 score2 score3           总分 排名 
11020449 a      10     20     30               60   1 
11020450 b      5      15     8                28   2
11020874 c      3      4      13               20   3 如上面一个列表,我使用循环方式来显示出来的,score1、score2、score3三个分数的总和即是总分。现在的问题是由于该列表记录是循环显示出来的,所以后面的排名是根据总分大小动态调整的。
请问有什么算法可以实现动态的排名。
比如我新增了一条记录d后则列表动态显示如下:
id       name   score1 score2 score3           总分 排名 
11020449 d      25     20     30               75   1 
11020449 a      10     20     30               60   2 
11020450 b      5      15     8                28   3
11020874 c      3      4      13               20   4

解决方案 »

  1.   

    如果是数据库,就用sql排序
    如果是文件,那你就自己累吧...
      

  2.   

    List中的数据在后台做一个保存(推荐链表),插入之前作一个二分查找在添加到相应位置,刷新List
      

  3.   

    select id ,name,score1,score2,score3 ,(score1 +score2 +score3 ) as s from 表名 order by s desc
      

  4.   

    如果虽然是文件,但只需要在内存中排序
    可以自己定义记录类,并自定义记录类的排序方式,然后调用集合框架提供的排序方法进行排序参考类和方法:
    Collections.sort()
    List
    Comparator
    Comparable
      

  5.   

    楼主的要求,用java.util.TreeSet这个类就可以了
    TreeSet(Comparator<? super E> c)
      

  6.   

    select id ,name,score1,score2,score3 ,(score1 +score2 +score3 ) as s from 表名 order by s desc这个还不ok?
      

  7.   

    score1,score2,score3 这三个值不是表中的字段,而是通过id经过某种算法算出来的。
    我只能在当前表中循环显示id、name的值,然后根据id来计算出score1,score2,score3,这样总分就可以通过(score1 +score2 +score3 ) 来计算。
    但是由于总分是动态计算出来的,所以排名就会出现变动,不知道我的描述是否清楚。
    Collections.sort()的方式确实是一个不错的思路,不知道是否有朋友能够给个详细的写法参考一下。多谢了
      

  8.   

    就是个对象排序阿,给你个例子:
    常常遇到数组排序的问题.比如我有一个Person类,它的实例对象存储在ArrayList数组中,现在要把ArrayList数组中的Person对象按照年龄排序.
    其实这种情况经常遇到.
    下面给出源代码:1:Person.java文件:-------------------------------
    public class Person{
     String name;
     int age;
     
     public Person(String name,int age){
      this.name = name;
      this.age = age;
      
     } public int getAge() {
      return age;
     } public void setAge(int age) {
      this.age = age;
     } public String getName() {
      return name;
     } public void setName(String name) {
      this.name = name;
     }}
    2:Mycomparator.java-------------------------------
    //实现Comparator接口,也就是定义排序规则,你几乎可以定义任何规则
    package com.infoearth;
    import java.util.*;
    public class Mycomparator implements Comparator{ public int compare(Object o1,Object o2) {
      Person p1=(Person)o1;
      Person p2=(Person)o2;  
      if(p1.age<p2.age)
       return 1;
      else
       return 0;
     }}3:ListSort.java------------------------------------package com.infoearth;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;public class ListSort {
     public static void main(String[] args){
      ArrayList list = new ArrayList();
      list.add(new Person("lcl",28));
      list.add(new Person("fx",23));
      list.add(new Person("wqx",29));
      Comparator comp = new Mycomparator();
      Collections.sort(list,comp);  
      for(int i = 0;i<list.size();i++){
       Person p = (Person)list.get(i);
       System.out.println(p.getName());
      }  
      
     }}
      

  9.   

    做一个类,假设叫UserInfo,包含id,name,score1,score2,score3和total的属性
    然后你从数据库中取的时候一边取一边填入对象中,并最后算出总分
    把所有的UserInfo对象放入一个List中为UserInfo编写一个根据total属性排序的Compartor类
    或者让UserInfo实现Comparable接口,实现根据total属性排序然后是用Collections.sort()方法对存放着所有UserInfo对象的List进行排序就可以了