当前位置: 首页 > 面试题库 >

为什么Java Vector(和Stack)类被视为过时或过时的?

颜志业
2023-03-14
问题内容

为什么Java Vector(和Stack)类被视为过时或过时的?


问题答案:

Vector在每个单独的操作上同步。那几乎从来不是你想要做的。

通常,你要同步整个操作序列。同步单个操作既不安全(Vector例如,如果你对进行迭代,则仍然需要锁,以避免其他人同时更改集合,这会导致ConcurrentModificationException迭代线程中的错误),但同步速度也较慢(为什么一次就够了就反复拿出锁)?

当然,即使你不需要时,它也具有锁定的开销。

基本上,在大多数情况下,这是一种非常有缺陷的同步方法。正如Brian Henk先生所指出的那样,你可以使用以下调用来装饰集合:[Collections.synchronizedList](http://java.sun.com/javase/6/docs/api/java/util/Collections.html#synchronizedList(java.util.List))- Vector将“调整大小的数组”集合实现与“同步每个操作”位结合在一起的事实是不良设计的另一个例子;装饰方法使关注点更清晰地分离。

至于Stack等效项-我会先看Deque/ ArrayDeque。



 类似资料:
  • 总的来说,我对OpenCV和图像处理相当陌生。我正在研究背景减法,以方便运动跟踪(人计数)。查看关于背景减法的openCV文档,GMG给出了相当不错的结果。同样,当看一个视频比较的方法,我觉得GMG给出了最好的结果,至少对我来说是这样。 我安装了opencv的最新版本,以便与python3一起使用: 有趣的是,在我自己的测试中,和的当前(3.0.0-dev)版本比我以前在OpenCv2中测试的版本

  • 问题内容: 我正在使用Apache Commons HttpClient PostMethod 3.1。 在PostMethod类中,还有三种用于设置POST方法的请求正文的方法: NameValuePair API 不建议使用前两种方法。有人知道为什么吗?因为如果我想将XML放入请求正文,NameValuePair不会对我有帮助。 有人知道解决方法或解决方案吗? 问题答案: Javadoc说:

  • 问题内容: 在我的应用程序中,我连接到服务器以对用户进行身份验证。这是代码: 我将连接超时设置为1000 ms = 1s,但是它被忽略了。当我调试并设置错误的用户名和密码时,我发现了 不是在1000毫秒之后,而是在5000 * 60毫秒之后= 5分钟 怎么了 ?如何减少超时时间? 问题答案: 我通过更改为最新版本的JavaMail(至JavaMail 1.5)解决了我的问题。我在这里写到:http

  • 当我阅读RISC-V用户级ISA手册时,我注意到它说“OpenRISC有条件代码和分支延迟槽,这使更高性能的实现变得复杂。”所以RISC-V没有分支延迟槽RISC-V用户级ISA手动链接。此外,维基百科说,大多数较新的RISC设计都省略了分支延迟槽。为什么大多数较新的RISC架构逐渐省略了分支延迟槽?

  • 传递给Stream.Generate方法的函数实现了供应商功能接口。注意,要作为生成器有用,供应商通常需要某种外部状态。在本例中,它的状态由两个最后的斐波那契序列号组成。 为了实现这种状态,我们使用一个数组而不是两个变量,因为lambda内部使用的所有外部变量都必须是final的。 我理解为什么在lamdba或匿名类中变量需要是final的,但我不理解为什么数组的值是“有效的final”的。 在这

  • 问题内容: 更新2: 现在在Chrome 31.0.1650.34 beta中运行下面的JSFiddle 不会 导致所描述的行为,即它不会“随着JavaScript的启动而冻结”。我只能假定他们已经将CSS转换放置在与JavaScript分开的单独线程上,以及页面的其余部分- 好消息!冻结/阻止的过渡仍会在Firefox 25.0中出现。 更新1: @IvanCastellanos提到在Andro