论坛首页 Java企业应用论坛

高效率分离字符串到一个Map中

浏览 7932 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2010-12-10  
有则改之,无则加勉
0 请登录后投票
   发表时间:2010-12-10  
luckaway 写道
hardPass 写道
悠游键客 写道
为啥要传一个Map参数进去,而不是直接就返回一个Map对象呢?


这个问题,难道也要问吗?

Map做为参数传递的好处应该很明显的……

啥好处?



我首先想到的两个好处是:
1、具体的Map类型可以由调用者控制,比如有的人希望是HashMap,有的希望是LockedMap……

2、可能不是新建的Map,原来Map里就有数据.
比如,我这边要解析1个报文,报文里有多行。每行都需要解析,所有行的解析的结果都是放在同一个Map里,这只是个例子。


0 请登录后投票
   发表时间: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了!
0 请登录后投票
   发表时间: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做哪些操作”,还调用这方法干嘛?
0 请登录后投票
   发表时间:2010-12-10  
发现中文;号了,不知道测试过没,楼主
0 请登录后投票
   发表时间:2010-12-10  
为啥不用正则表达式. 那代码读起来多舒服.

其实正则表达式也不舒服. 一个人写的别人也看着费劲.
不过至少比这一大段代码维护起来要容易.
0 请登录后投票
   发表时间:2010-12-10  
hardPass 写道
luckaway 写道
hardPass 写道
悠游键客 写道
为啥要传一个Map参数进去,而不是直接就返回一个Map对象呢?


这个问题,难道也要问吗?

Map做为参数传递的好处应该很明显的……

啥好处?



我首先想到的两个好处是:
1、具体的Map类型可以由调用者控制,比如有的人希望是HashMap,有的希望是LockedMap……

2、可能不是新建的Map,原来Map里就有数据.
比如,我这边要解析1个报文,报文里有多行。每行都需要解析,所有行的解析的结果都是放在同一个Map里,这只是个例子。




1.用返回的方法也是一样的,多态而已!

2.不利于测试!
0 请登录后投票
   发表时间: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);
		}

	}
}
 


还是上面哪句话,字符串不是字节串,字符串是有编码的。public static void parseParameters(Map map, byte[] data, String 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实现,先打好基础!

 

 

0 请登录后投票
   发表时间:2010-12-10  
不是以讹传讹是互相讨论,讨论了才映像深刻,才能够有进步。。。
0 请登录后投票
   发表时间:2010-12-10  
String key = null; 
            String value = null;

貌似这么初始化字符串不是好习惯吧?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics