* 定义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做呢?
* 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做呢?
不过上面的功能一个循环可以实现,怎么会用两个循环呢
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());
}
}
}
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;
}
你的那个具体怎么做的能详细点么?