求一个简便的算法

兄弟们帮忙分析一个数据分析的算法呀
假如有这样的二维数据
001 张三 1300112 2500.0
001 张三 2222223 3000.0
003 李四 3124213 2800.0
002 老赵 5432545 4500.0
002 老刘 5432545 3400.0
003 王六 3124213 2800.0
假如我要按照第一列作为关键字整理的话,去掉重复的,最后只有001,002,003
现在我要把数据按照第一列整理成三行,第二列取第一次出现的,即001取张三,002 取老赵,003取李四
第三列的处理同第二列
第四列把相同的关键字的数据相加 ,即001对应5500.0 ,002对应7900.0 ,003对应5600.00
整理出来的数据格式如下:
001 张三 1300112 5500.0
002 老赵 5432545 7900.0
003 李四 3124213 5600.0

该怎么写算法实现呢?

这个只是对数据的操作,不是数据库

利用Map就可以实现了,把第一列作为key,其他几列合并成一个对象作为value。伪代码如下:
遍历你的数据列表:
检查HashMap中有无这一key, 若有,则把value中的第4列相加。
若无,将key和value放入map.

最终的map中的结果就是你所需要的。
如果需要对第一列排序,可以用TreeMap,要不就用HashMap

[size=x-large][color=red]你这里的二维数据可以用二维数组来表示.然后,按照要求来遍历数组的元素.
因为结果数组的行数不确定,但列数确定.而JAVA语言二维数组定义时,要定义行数,列数可以不定义,所以我们先定义列数为四的数组,行数不定.

然后对中间数组resultArr进行转置(线性代数里的思想).

希望对你有帮助[/color][/size]

下面的代码(JDK1.5运行正确)
[code="java"]
package com.Test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashSet;
import java.util.Set;

/*

  • created time:上午10:22:46
  • creator: Tian Zhichao (chinoistzc@gmail.com)
    *
    */
    public class ManiData {

    /**

    • main() 2010-4-10,上午10:22:46
      */
      public static void main(String[] args) {
      // TODO Auto-generated method stub
      try {

      String[][] sourceArr={{"001","张三","1300112","2500.0"},{"001","张三","2222223","3000.0"},{"003","老四","3124213","2800.0"},{"002","老赵","5432545","4500.0"},{"002","老刘","5432545","3400.0"},{"003","王六","3124213","2800.0"}};
      for (String[] strings2 : sourceArr) {
          for (int i = 0; i < strings2.length; i++) {
              System.out.print(strings2[i]+" ");
          }
          System.out.println();
      }
      Set<String> set = new HashSet<String>();
      for(int i=0; i<sourceArr.length; i++){
          set.add(sourceArr[i][0]);
      }
      String [][] resultArr = new String[4][set.size()];
      int colPos = 0;
      boolean flag = false;
      for(int i=0; i<sourceArr.length; i++){
          String[] curRow = sourceArr[i];
          flag = false;
          for(int j=0; j<resultArr[0].length; j++){
              if ((resultArr[0][j]!=null)&&(curRow[0].equals(resultArr[0][j]))) {
                  Double sum = Double.parseDouble(resultArr[3][j]);
                  Double d = Double.parseDouble(curRow[3]);
                  resultArr[3][j] = String.valueOf(sum+d);
                  flag = true;
              }
          }
          if (false == flag){
              resultArr[0][colPos]=curRow[0];
              resultArr[1][colPos]=curRow[1];
              resultArr[2][colPos]=curRow[2];
              resultArr[3][colPos]=curRow[3];
              colPos++;
          }
      
      }
      System.out.println("----------------");
      String[][] finalArr = new String[resultArr[0].length][resultArr.length];
      for(int i=0; i<resultArr[0].length; i++)
          for(int j=0; j<resultArr.length; j++){
              finalArr[i][j]=resultArr[j][i];
          }
      
      for (String[] strings : finalArr) {
          for (int i = 0; i < strings.length; i++) {
              System.out.print(strings[i]+" ");
          }
          System.out.println();
      }
      

      } catch (Exception e) {
      e.printStackTrace();
      }

    }

}

[/code]