Vector浅析
来源:互联网 发布:淘宝发布宝贝不同重量 编辑:程序博客网 时间:2024/06/15 12:34
Vector与ArrayList很像,主要区别在于Vector是线程安全的。
Vector的类声明:
*
As of the Java 2 platform v1.2, this class was retrofitted to
* implement the {@link List} interface, making it a member of the
*
* Java Collections Framework. Unlike the new collection
* implementations, {@code Vector} is synchronized. If a thread-safe
* implementation is not needed, it is recommended to use {@link
* ArrayList} in place of {@code Vector}.
阅读源码后发现,Vector是通过给所有的外部类加上synchronized来实现的。这种实现方式很简单,但由于synchronized是对this加锁,所以当需要同时一个对象的多个方法时,效率就会很低。
另外,查看iterator的源码
/** * Returns an iterator over the elements in this list in proper sequence. * * <p>The returned iterator is <a href="#fail-fast"><i>fail-fast</i></a>. * * @return an iterator over the elements in this list in proper sequence */public synchronized Iterator<E> iterator() { return new Itr();}
可以发现,在返回遍历对象后,就已经退出了锁,如果修改了对象之后,再去遍历,则会抛出ConcurrentModificationException异常.
Vector<String> vector = new Vector<String>();vector.add("abc");Iterator<String> ite = vector.iterator();vector.add("bcd");while (ite.hasNext()) { System.out.println(ite.next());}
运行结果:
Exception in thread "main" java.util.ConcurrentModificationException at java.util.Vector$Itr.checkForComodification(Vector.java:1184) at java.util.Vector$Itr.next(Vector.java:1137) at com.showstone.containerresearch.list.VectorResearch.main(VectorResearch.java:14)
0 0
- Vector浅析
- std::vector源码浅析
- vector删除元素浅析
- C++ vector 容器浅析
- c++ stl 之vector浅析
- Java中ArrayList、Vector、LinkedList浅析
- 源码浅析 ArrayList、Vector、LinkedList 的区别
- JDK源码分析——Java.util.Vector的浅析
- JDK源码分析——Java.util.Vector的浅析
- C++STL技术原理浅析与应用基础之vector
- C++ vector,list,dequeue,stack 存储结构浅析
- 浅析Arm Linux中断Vector向量表的建立流程
- SGI STL的序列式容器之vector浅析
- 浅析Java集合类源码(一)--- Vector, ArrayList, LinkedList
- C++(笔记)浅析vector容器的实例
- C++数组替代品之vector&array用法浅析
- sklearn浅析(七)——Support Vector Machines
- vector
- 给iOS开发者的Android开发建议
- 开发总结1:
- Cordys 各个containner的作用和 系统默认的Application的说明 【来自API】
- ORA-16032: parameter LOG_ARCHIVE_DEST_3 destination string cannot be translated问题处理过程
- curl访问文件出现504bad gatway
- Vector浅析
- 在OS X中安装配置Maven
- 微信图文中出现了腾讯视频时,教你弄到不能直接获取的视频原始地址的方法~
- 4.17
- linux命令学习:iptables详解2
- 著名Diffie-Hellman协议
- 从客户端中检测到有潜在危险的 Request.Form 值
- mq常用命令
- mysql中case..when..then..else..end的两种用法介绍