日期:2014-05-18  浏览次数:20714 次

容器、数组效率差距到底有多大,如果换为本地方法呢?
1.遍历容器和数组的时候,效率差距会很大吗?如果考虑容器是线程安全的,差距大多少?
2.本地方法会提升遍历的性能吗?
------解决方案--------------------
不大。。
按照你的理解,容器中其实也是一个数组。
------解决方案--------------------
1. 不大,容器本身就是数组,只是加上了一些控制访问或者其他的限制;在并发的条件下,收到并发数量和元素个数的影响,不同的数据结构在不同的场景下差异很大,这个数据可以参考<java并发编程实践>,书里有详尽的测试数据

2.理论上应该是可以的,不过遍历很少会成为系统的瓶颈,所以很少会考虑在这个角度上对系统做优化
------解决方案--------------------
引用:
1. 不大,容器本身就是数组,只是加上了一些控制访问或者其他的限制;在并发的条件下,收到并发数量和元素个数的影响,不同的数据结构在不同的场景下差异很大,这个数据可以参考<java并发编程实践>,书里有详尽的测试数据

2.理论上应该是可以的,不过遍历很少会成为系统的瓶颈,所以很少会考虑在这个角度上对系统做优化
一般容器是否占用更多的内存?能用数组就尽量用数组的思维是好是坏?
------解决方案--------------------
差距不大,说到底容器也就是数组。
------解决方案--------------------
引用:
Quote: 引用:

1. 不大,容器本身就是数组,只是加上了一些控制访问或者其他的限制;在并发的条件下,收到并发数量和元素个数的影响,不同的数据结构在不同的场景下差异很大,这个数据可以参考<java并发编程实践>,书里有详尽的测试数据

2.理论上应该是可以的,不过遍历很少会成为系统的瓶颈,所以很少会考虑在这个角度上对系统做优化
一般容器是否占用更多的内存?能用数组就尽量用数组的思维是好是坏?


在实践中,往往80%的性能瓶颈是由20%的代码产生的,所以一般情况下不会去考虑“能用数组就尽量用数组”,这等同于自己去实现容器已经实现了的功能=重复造轮子。

你一定要纠结“容器是否占用更多的内存”,答案:是,因为容器用的是固定大小的数组,在使用过程中会经常性的需要扩容(数组的拷贝),所以占空间要大,更详细的可以去参考源码。

深究是好事,不过建议在实践中,不要把80%的时间,花在20%的性能瓶颈上。
------解决方案--------------------
引用:
Quote: 引用:

1. 不大,容器本身就是数组,只是加上了一些控制访问或者其他的限制;在并发的条件下,收到并发数量和元素个数的影响,不同的数据结构在不同的场景下差异很大,这个数据可以参考<java并发编程实践>,书里有详尽的测试数据

2.理论上应该是可以的,不过遍历很少会成为系统的瓶颈,所以很少会考虑在这个角度上对系统做优化

java并发编程实践
类似的并发编程的书籍,多线程类的书籍,经典的能否推荐基本呢?
或者网上比较著名的源码也行。谢谢了


《java并发编程实践》个人感觉这本书很全面了,没读过其他的相关书籍,这本书一直放在手边做参考。

源码的话,可以去读读Netty的源码,里面关于并发的消息接收分发的模型设计思想,可以借鉴
------解决方案--------------------
遍历的效率肯定可以约等
------解决方案--------------------
引用:
Quote: 引用:

遍历的效率肯定可以约等

如果线程安全的容器进行遍历,效率会有差别吗?


如果是Iterator方法,会有效率差,但是也可以忽略
------解决方案--------------------
不需要去考虑这些东西的性能,这些东西性能,特别是数组都是经过极度优化的,性能是极快的!
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

遍历的效率肯定可以约等

如果线程安全的容器进行遍历,效率会有差别吗?


如果是Iterator方法,会有效率差,但是也可以忽略

我想知道这种效率差的量级有多大,PS自己手头没有条件写代码测试。


100W条数据  数组用下标遍历0秒  ArrayList用iterator遍历31秒
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

遍历的效率肯定可以约等

如果线程安全的容器进行遍历,效率会有差别吗?


如果是Iterator方法,会有效率差,但是也可以忽略

我想知道这种效率差的量级有多大,PS自己手头没有条件写代码测试。


100W条数据  数组用下标遍历0秒  ArrayList用iterator遍历31秒


我想问的是 100 万条数据,从头到底遍历一遍的意义是什么?
用Java如何实现在线文本阅读器功能,譬如豆瓣、百度文库里的