首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

署理一个类需特别注意的点

2012-12-26 
代理一个类需特别注意的点java的23种模式中,有代理模式。然而,我们仅仅是代理实现了interface的方法,却忘记

代理一个类需特别注意的点

java的23种模式中,有代理模式。

然而,我们仅仅是代理实现了interface的方法,却忘记了Objectequalshashcode的方法!!

?

今天在处理Hadoop的Text的时刻遇到了一点问题,Text是Hadoop中类似于JDK的String类。

?

    MapWritable result = new MapWritable();    Map<String, Integer> resultTmp = new HashMap<String, Integer>();    for (MapWritable hmw : results.getResults()) {    for(Writable writable:hmw.keySet()){    Text text = (Text)writable;    String key = new String(text.getBytes());Integer total = resultTmp.get(key);    IntWritable increment  = (IntWritable)hmw.get(writable);    if (total!=null){    resultTmp.put(key, total+increment.get());    }else{    resultTmp.put(key, increment.get());    }    }    }    for(String key:resultTmp.keySet()){    result.put(new Text(key), new IntWritable(resultTmp.get(key)));    }    return result;

?

上面得到的Key的String会多出一些空格。所以直接使用Text来代替,无需转换为String。

?

    MapWritable result = new MapWritable();    Map<Text, Integer> resultTmp = new HashMap<Text, Integer>();    for (MapWritable hmw : results.getResults()) {    for(Writable writable:hmw.keySet()){    Text key = (Text)writable;Integer total = resultTmp.get(key);    IntWritable increment  = (IntWritable)hmw.get(writable);    if (total!=null){    resultTmp.put(key, total+increment.get());    }else{    resultTmp.put(key, increment.get());    }    }    }    for(Text key:resultTmp.keySet()){    result.put(key, new IntWritable(resultTmp.get(key)));    }    return result;

?考虑到另一个问题,加入到Map后,equals和hashcode是否与String一样的呢!?Hadoop的源码还是OK的。

?

热点排行