容器、数组效率差距到底有多大,如果换为本地方法呢?

大板牙花生 2014-02-16 08:46:34
加精
1.遍历容器和数组的时候,效率差距会很大吗?如果考虑容器是线程安全的,差距大多少?
2.本地方法会提升遍历的性能吗?
...全文
3059 46 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
智行天下8 2014-11-27
  • 打赏
  • 举报
回复
争论无用,写代码就行,下面代码有不足之处请指出。 public static void testAyyayPerformance() { int[] intArray = new int[10000000]; long start = System.currentTimeMillis(); int j; for(int i : intArray){ j = i; }; long end = System.currentTimeMillis(); System.out.println("数组耗时:" + (end - start)); //我电脑实测12ms ArrayList<Integer> arrayList = new ArrayList<Integer>(); for(Integer i=0;i<10000000;i++){ arrayList.add(i); } Integer intA; start = System.currentTimeMillis(); for(Integer a : arrayList){ intA = a; } end = System.currentTimeMillis(); System.out.println("ArrayList耗时:" + (end - start)); //我电脑实测140ms }
villagehead 2014-03-12
  • 打赏
  • 举报
回复
数组操作很多都是native的吧? 理论上应该是最快的了 如果实战, 需要一定灵活度,比如不知道要装多少东西, 用ArrayList就行,它里面也是Object数组的实现。 至于快多少快几倍, 现在的软硬件环境应该能提供很好的运行平台, 可以忽略不计了(个人感觉) good luck
momoaiyanzi 2014-03-11
  • 打赏
  • 举报
回复
我表示我只听说过java IO 瓶颈。JVM 很慢,那个是过去式了。 数组是一种较为简单的数据结构,内存占用很少,遍历速度快。容器维护了较为复杂的数据结构,例如HashMap 维护了一个数组,数组的元素是一个链表。遍历的时候占用时间肯定增多。 开发上,数组也有使用,总体上还是容器用的多一些。 并发的话,选择高效的容器。例如 HashTable 是线程同步的,但是很慢。用synchronized 同步HashMap效率也不高。可以使用 conccurent 包下的 ConcurrentHashMap。
平菇虾饺 2014-03-11
  • 打赏
  • 举报
回复
引用 32 楼 wter26 的回复:
[quote=引用 23 楼 qyp199312 的回复:] 容器跟数组差不多的。 不过本地肯定是厉害得多了,毕竟java多了一个虚拟机
本地方法会因为指令的增多导致跟虚拟机效果差不多么? 毕竟虚拟机解释跟本地方法调用方法一样,都需要另外的指令执行,二者效率真的会有很大差异么?[/quote] 不管是什么指令,到最后都必须解释为机器指令才能被机器所理解。 先启动虚拟机,在一个类的生存周期里面,先装载,再重构造(具体怎么称呼忘记了,是将class重排序什么的),再运行,最后退出。运行过程中指令被虚拟机解释,虚拟机转化为机器码,这样就多了一个过程了, 比如一个100W的遍历,就得多100W次。当然,这也涉及到了JAVA虚拟机的一部分置换算法或者是其他的优化算法,结果不尽相同,但是一定会花去一部分时间
sunbo624 2014-02-27
  • 打赏
  • 举报
回复
引用 41 楼 hjgzj 的回复:
[quote=引用 40 楼 sunbo624 的回复:] [quote=引用 39 楼 hjgzj 的回复:] [quote=引用 29 楼 sunbo624 的回复:] [quote=引用 21 楼 hjgzj 的回复:] [quote=引用 14 楼 sunbo624 的回复:] [quote=引用 12 楼 wter26 的回复:] [quote=引用 11 楼 sunbo624 的回复:] [quote=引用 10 楼 wter26 的回复:] [quote=引用 9 楼 sunbo624 的回复:] 遍历的效率肯定可以约等
如果线程安全的容器进行遍历,效率会有差别吗?[/quote] 如果是Iterator方法,会有效率差,但是也可以忽略[/quote] 我想知道这种效率差的量级有多大,PS自己手头没有条件写代码测试。[/quote] 100W条数据 数组用下标遍历0秒 ArrayList用iterator遍历31秒[/quote] ArrayList直接用for或者foreach遍历 再看看效率[/quote] ArrayList用for肯定和数组一样 foreach==iterator 不用测[/quote] 不用测这三个字很不负责的。[/quote] 看过JDK源码都知道 我比起你们这些逛说不写的 要负责的多 [/quote] 真狂啊 大牛都不吹的 这是求知的地方 你随便说个答案别人要是都相信了 还要学习干嘛?[/quote] 你自己不写代码 不看源码 在这逼逼个鸡巴 这东西就是靠测的 你不信问个鸡巴 自己测啊 草 真不爱骂你
  • 打赏
  • 举报
回复
引用 40 楼 sunbo624 的回复:
[quote=引用 39 楼 hjgzj 的回复:] [quote=引用 29 楼 sunbo624 的回复:] [quote=引用 21 楼 hjgzj 的回复:] [quote=引用 14 楼 sunbo624 的回复:] [quote=引用 12 楼 wter26 的回复:] [quote=引用 11 楼 sunbo624 的回复:] [quote=引用 10 楼 wter26 的回复:] [quote=引用 9 楼 sunbo624 的回复:] 遍历的效率肯定可以约等
如果线程安全的容器进行遍历,效率会有差别吗?[/quote] 如果是Iterator方法,会有效率差,但是也可以忽略[/quote] 我想知道这种效率差的量级有多大,PS自己手头没有条件写代码测试。[/quote] 100W条数据 数组用下标遍历0秒 ArrayList用iterator遍历31秒[/quote] ArrayList直接用for或者foreach遍历 再看看效率[/quote] ArrayList用for肯定和数组一样 foreach==iterator 不用测[/quote] 不用测这三个字很不负责的。[/quote] 看过JDK源码都知道 我比起你们这些逛说不写的 要负责的多 [/quote] 真狂啊 大牛都不吹的 这是求知的地方 你随便说个答案别人要是都相信了 还要学习干嘛?
sunbo624 2014-02-27
  • 打赏
  • 举报
回复
引用 39 楼 hjgzj 的回复:
[quote=引用 29 楼 sunbo624 的回复:] [quote=引用 21 楼 hjgzj 的回复:] [quote=引用 14 楼 sunbo624 的回复:] [quote=引用 12 楼 wter26 的回复:] [quote=引用 11 楼 sunbo624 的回复:] [quote=引用 10 楼 wter26 的回复:] [quote=引用 9 楼 sunbo624 的回复:] 遍历的效率肯定可以约等
如果线程安全的容器进行遍历,效率会有差别吗?[/quote] 如果是Iterator方法,会有效率差,但是也可以忽略[/quote] 我想知道这种效率差的量级有多大,PS自己手头没有条件写代码测试。[/quote] 100W条数据 数组用下标遍历0秒 ArrayList用iterator遍历31秒[/quote] ArrayList直接用for或者foreach遍历 再看看效率[/quote] ArrayList用for肯定和数组一样 foreach==iterator 不用测[/quote] 不用测这三个字很不负责的。[/quote] 看过JDK源码都知道 我比起你们这些逛说不写的 要负责的多
  • 打赏
  • 举报
回复
引用 29 楼 sunbo624 的回复:
[quote=引用 21 楼 hjgzj 的回复:] [quote=引用 14 楼 sunbo624 的回复:] [quote=引用 12 楼 wter26 的回复:] [quote=引用 11 楼 sunbo624 的回复:] [quote=引用 10 楼 wter26 的回复:] [quote=引用 9 楼 sunbo624 的回复:] 遍历的效率肯定可以约等
如果线程安全的容器进行遍历,效率会有差别吗?[/quote] 如果是Iterator方法,会有效率差,但是也可以忽略[/quote] 我想知道这种效率差的量级有多大,PS自己手头没有条件写代码测试。[/quote] 100W条数据 数组用下标遍历0秒 ArrayList用iterator遍历31秒[/quote] ArrayList直接用for或者foreach遍历 再看看效率[/quote] ArrayList用for肯定和数组一样 foreach==iterator 不用测[/quote] 不用测这三个字很不负责的。
llkkwwjj 2014-02-25
  • 打赏
  • 举报
回复
超人1号 2014-02-25
  • 打赏
  • 举报
回复
不懂啊,友情帮个ING
fanyue1989 2014-02-25
  • 打赏
  • 举报
回复
差距很大,数组是可以随机访问的
jackie0924 2014-02-25
  • 打赏
  • 举报
回复
菜鸟一个,来看看学习一下
sunbo624 2014-02-24
  • 打赏
  • 举报
回复
引用 21 楼 hjgzj 的回复:
[quote=引用 14 楼 sunbo624 的回复:] [quote=引用 12 楼 wter26 的回复:] [quote=引用 11 楼 sunbo624 的回复:] [quote=引用 10 楼 wter26 的回复:] [quote=引用 9 楼 sunbo624 的回复:] 遍历的效率肯定可以约等
如果线程安全的容器进行遍历,效率会有差别吗?[/quote] 如果是Iterator方法,会有效率差,但是也可以忽略[/quote] 我想知道这种效率差的量级有多大,PS自己手头没有条件写代码测试。[/quote] 100W条数据 数组用下标遍历0秒 ArrayList用iterator遍历31秒[/quote] ArrayList直接用for或者foreach遍历 再看看效率[/quote] ArrayList用for肯定和数组一样 foreach==iterator 不用测
大板牙花生 2014-02-24
  • 打赏
  • 举报
回复
引用 23 楼 qyp199312 的回复:
容器跟数组差不多的。 不过本地肯定是厉害得多了,毕竟java多了一个虚拟机
本地方法会因为指令的增多导致跟虚拟机效果差不多么? 毕竟虚拟机解释跟本地方法调用方法一样,都需要另外的指令执行,二者效率真的会有很大差异么?
大板牙花生 2014-02-24
  • 打赏
  • 举报
回复
引用 30 楼 ytchangxiao 的回复:
扯蛋吧,遍历个100万的列表要31秒,可能吗?
是快了还是慢了
ytchangxiao 2014-02-24
  • 打赏
  • 举报
回复
扯蛋吧,遍历个100万的列表要31秒,可能吗?
xiaoxiangqing 2014-02-23
  • 打赏
  • 举报
回复
数组要快些。
xusir98 2014-02-23
  • 打赏
  • 举报
回复
DevilDust 2014-02-23
  • 打赏
  • 举报
回复
菜鸟,学习了
xusir98 2014-02-22
  • 打赏
  • 举报
回复
加载更多回复(23)

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧