我的测试结果:
(循环是1024*100次)
NonGeneric: 180-190 ms (第一次770ms?)
Generic: 220-230 ms
相差没这么大。
ArrayList:
NonGeneric: 240 - 250ms
Generic: 240 ms
(循环是1024*100次)
NonGeneric: 180-190 ms (第一次770ms?)
Generic: 220-230 ms
相差没这么大。
ArrayList:
NonGeneric: 240 - 250ms
Generic: 240 ms
jdk1.5.0 beta2
反观java,由于Object的存在,因此,java的Collection中存是绝对没有问题的。当然原生类型另当别论,所以相对<T>而言,我更支持自动拆封箱。不过,这个仍然会带来一些问题,比如向一个存放了非原生类型数据或者NullPointer或者根本就是没有东西的Map索要原生类型数据,会导致什么结果,Exception or 0 or default? 可能还需商榷。另外,通常情况下,存放数据与取数据的都是受(程序设计)控制的,我认为,不需要强制要求检查存放类型。对于取而言,现有的方案也并不是不能忍受的。首先,放进去的虽然具体类型不一,但肯定是某一类的东西,我们要的是多态。拿出来之后,我们仅需从Object强制转型到这个统一的父类型即可,这个可能是范型与非范型相比,差异最大的地方。少数情况下,会有若干种无关类型(及子类型),可能会用到instanceof。但是如果碰到了无数种类型,向大杂烩那样放在某个Collection里面,那么这个肯定是程序设计出了问题,即使范型也无能为力。再者,改造JVM的代价,使得java的范型无论如何不可能产生革命性变革,导致大量好处,因此我个人在编写程序的时候,一般是不会考虑Generic的
〉NonGeneric: 180-190 ms (第一次770ms?)java测试的时候我也发现过类似问题,同样的程序,同样的参数,运行过程和运行结果,第一次总是很慢,而紧接着的后面几次,效率会得到大幅度提升,不知道是不是什么东西在哪里进行了缓存?jvm, 应该不会,测试时每次我都是在控制台打java -cp ......, JVM应该已经退出
windows,没研究过
这东西应该还是有用的,至于实现的效率低,那是sun的问题