锁定老帖子 主题:高效率分离字符串到一个Map中
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-10
有则改之,无则加勉
|
|
返回顶楼 | |
发表时间:2010-12-10
luckaway 写道 hardPass 写道 悠游键客 写道 为啥要传一个Map参数进去,而不是直接就返回一个Map对象呢?
这个问题,难道也要问吗? Map做为参数传递的好处应该很明显的…… 啥好处? 我首先想到的两个好处是: 1、具体的Map类型可以由调用者控制,比如有的人希望是HashMap,有的希望是LockedMap…… 2、可能不是新建的Map,原来Map里就有数据. 比如,我这边要解析1个报文,报文里有多行。每行都需要解析,所有行的解析的结果都是放在同一个Map里,这只是个例子。 |
|
返回顶楼 | |
发表时间:2010-12-10
最后修改:2010-12-10
hardPass 写道 luckaway 写道 hardPass 写道 悠游键客 写道 为啥要传一个Map参数进去,而不是直接就返回一个Map对象呢?
这个问题,难道也要问吗? Map做为参数传递的好处应该很明显的…… 啥好处? 我首先想到的两个好处是: 1、具体的Map类型可以由调用者控制,比如有的人希望是HashMap,有的希望是LockedMap…… 2、可能不是新建的Map,原来Map里就有数据. 比如,我这边要解析1个报文,报文里有多行。每行都需要解析,所有行的解析的结果都是放在同一个Map里,这只是个例子。 1.用哪个具体类,一般都是由由被调用者决定的,对调用者而言应该是透明的。但是也不能排除你所提到这种特殊情况, 至少楼主的帖子没这个需求。 2.如果Map里面已经有数据了,你无法知道方法里会对已有的Map做哪些操作,它很有可能会覆盖原先已经有的值。 我更倾向于,return;putAll!你可能会顾及性能问题,如果你真的在乎性能,有其他更有意义的事情等你去做。 但是如果代码片断每天执行好几千亿次,可能这点性能也是较可观的,那时候可能也不会用java了! |
|
返回顶楼 | |
发表时间:2010-12-10
luckaway 写道 hardPass 写道 luckaway 写道 hardPass 写道 悠游键客 写道 为啥要传一个Map参数进去,而不是直接就返回一个Map对象呢?
这个问题,难道也要问吗? Map做为参数传递的好处应该很明显的…… 啥好处? 我首先想到的两个好处是: 1、具体的Map类型可以由调用者控制,比如有的人希望是HashMap,有的希望是LockedMap…… 2、可能不是新建的Map,原来Map里就有数据. 比如,我这边要解析1个报文,报文里有多行。每行都需要解析,所有行的解析的结果都是放在同一个Map里,这只是个例子。 1.用哪个具体类,一般都是由由被调用者决定的,对调用者而言应该是透明的。但是也不能排除你所提到这种特殊情况, 至少楼主的帖子没这个需求。 2.如果Map里面已经有数据了,你无法知道方法里会对已有的Map做哪些操作,它很有可能会覆盖原先已经有的值。 我更倾向于,return;putAll!你可能会顾及性能问题,如果你真的在乎性能,有其他更有意义的事情等你去做。 但是如果代码片断每天执行好几千亿次,可能这点性能也是较可观的,那时候可能也不会用java了! 第二条,如果“无法知道方法里会对已有的Map做哪些操作”,还调用这方法干嘛? |
|
返回顶楼 | |
发表时间:2010-12-10
发现中文;号了,不知道测试过没,楼主
|
|
返回顶楼 | |
发表时间:2010-12-10
为啥不用正则表达式. 那代码读起来多舒服.
其实正则表达式也不舒服. 一个人写的别人也看着费劲. 不过至少比这一大段代码维护起来要容易. |
|
返回顶楼 | |
发表时间:2010-12-10
hardPass 写道 luckaway 写道 hardPass 写道 悠游键客 写道 为啥要传一个Map参数进去,而不是直接就返回一个Map对象呢?
这个问题,难道也要问吗? Map做为参数传递的好处应该很明显的…… 啥好处? 我首先想到的两个好处是: 1、具体的Map类型可以由调用者控制,比如有的人希望是HashMap,有的希望是LockedMap…… 2、可能不是新建的Map,原来Map里就有数据. 比如,我这边要解析1个报文,报文里有多行。每行都需要解析,所有行的解析的结果都是放在同一个Map里,这只是个例子。 1.用返回的方法也是一样的,多态而已! 2.不利于测试! |
|
返回顶楼 | |
发表时间:2010-12-10
既然这么热的话,我也来点评一下把!
hardPass 写道
int len = data.length(); byte[] bytes = new byte[len]; bytes=data.getBytes();
没有理解,String是字符串,不是字节串,长度一般不会相等。 char[] 和byte[]的区别!
楼主修改后,是不是还有问题呢?
package test.hewen; import java.io.UnsupportedEncodingException; import java.util.Map; public class StringUtil { public static void parseParameters(Map map, String data, String encoding) throws UnsupportedEncodingException { if ((data != null) && (data.length() > 0)) {//将字符串转换为字节数组 byte[] bytes ; bytes=data.getBytes(); //修改后,还是有问题! parseParameters(map, bytes, encoding); } } }
比如:
key = new String(data, 0, ox, encoding); 。
为什么 public static void parseParameters(Map map, String data, String encoding) 没有注意呢?
楼主是不是忽略了java.lang.String#getBytes(String encoding)的方法呢?
请楼主谦虚点: he_wen 写道 哥们,那个搞错了,大家多注意下,我贴出来的意思也是让大家多多学习。。。
he_wen 写道
哥们不要重构而重构,思维固化了可不是什么好事。在重构里面讲的只是建议。。。
请原谅我比较直接,自己没有搞明白的时候,不要以讹传讹。不要去研究什么Tomcat实现,先打好基础!
|
|
返回顶楼 | |
发表时间:2010-12-10
不是以讹传讹是互相讨论,讨论了才映像深刻,才能够有进步。。。
|
|
返回顶楼 | |
发表时间:2010-12-10
String key = null;
String value = null; 貌似这么初始化字符串不是好习惯吧? |
|
返回顶楼 | |