* 定义TrafficLog Class,含有srcIp(String),destIp(String),event(String),transferBytes(long)成员变量,请实现如下函数:
 * public static Collection<TrafficeLog> doStatistic(List<TrafficeLog> list)
 * 要求这个函数能够做如下统计:
 * (1)如果两个TrafficLog Object含有相同的srcIp,destIp,那么就把这两个Object的event相加作为event的值,把这两个Object的transferBytes相加作为transferBytes的值;
 * (2)把统计所得List返回;
 * (3)例如如下main函数:
 *      public static void main(String[] args) {
 *           List<TrafficeLog> list = new ArrayList<TrafficeLog>();
 *           list.add(new TrafficeLog("1.1.1.1", "2.2.2.2", 2, 1234));
 *           list.add(new TrafficeLog("1.1.1.1", "2.2.2.2", 2, 4321));
 *           list.add(new TrafficeLog("2.1.1.1", "2.2.2.2", 2, 1111));
 *           list.add(new TrafficeLog("2.1.1.1", "2.2.2.2", 2, 2222));
 *           Collection<TrafficeLog> result = doStatistic(list);
 *           Iterator<TrafficeLog> iter = result.iterator();
 *        while (iter.hasNext()) {
 *           System.out.println(iter.next());
 *        }
 *     }
 * 输出为:
 *    [srcIp=1.1.1.1][destIp=2.2.2.2][event=4][transferBytes=5555]
 *    [srcIp=2.1.1.1][destIp=2.2.2.2][event=2][transferBytes=3333]我用的两个循环做的 效率太低 怎么用hashmap做呢?

解决方案 »

  1.   

    hashmap中的重复值会把前面的值覆盖掉,不能实现后面的两个值相加...
    不过上面的功能一个循环可以实现,怎么会用两个循环呢
      

  2.   

    将类实例放到TreeSet里面,添加删除等操作时间log(n),然后遍历一遍就可统计出,时间n,所以总时间花费n+log(n)
      

  3.   

    public Collection doStatistic(List list){
      Hashtable result=new Hashtable();
      for(int i=0;i<list.size();i++){
        TrafficLog t_new=new TrafficLog();
        t_new=list.get(i);
        String key=t_new.getSrcIp()+t_new.getDestIp();
        TrafficLog t_old=result.get(key);
        if(t_old==null){
           result.put(key,t);
        }else{
           t_old.setEvent(t_old.getEvent()+t_new.getEvent());
           t_old.setTransferBytes(t_old.setTransferBytes()+t_new.setTransferBytes()); 
        }
      } 
    }
      

  4.   

    晕了,没写返回值
    public Collection doStatistic(List list){
      Hashtable result=new Hashtable();
      for(int i=0;i<list.size();i++){
        TrafficLog t_new=new TrafficLog();
        t_new=list.get(i);
        String key=t_new.getSrcIp()+t_new.getDestIp();
        TrafficLog t_old=result.get(key);
        if(t_old==null){
           result.put(key,t);
        }else{
           t_old.setEvent(t_old.getEvent()+t_new.getEvent());
           t_old.setTransferBytes(t_old.setTransferBytes()+t_new.setTransferBytes()); 
        }
      } 
      
      return result;
    }
      

  5.   

    TreeSet以natural order 排序,当然可以自己实现排序方式Comparable or Comparator
      

  6.   

    tomcatjava(小鱼儿) 
    你的那个具体怎么做的能详细点么?