ArrayList和Vector以及synchronizedList
来源:互联网 发布:java aes 256 cbc 编辑:程序博客网 时间:2024/06/10 01:05
ArrayList和Vector都是使用数组方式存储数据
区别大概就是Vector本身所有方法都是用synchronized修饰的,所以线程安全,而ArrayList没有
还有一个区别就是新增元素的时候Vector的增量是原来的一倍,而ArrayList增加原来的一半
public void ensureCapacity(int minCapacity) { modCount++; int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object oldData[] = elementData; int newCapacity = (oldCapacity * 3)/2 + 1; if (newCapacity < minCapacity) newCapacity = minCapacity; // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); } }
synchronizedList修饰的list如下
private static List<String> TEST_LIST = Collections.synchronizedList(new ArrayList<String>());
包裹了普通的ArrayList提供了线程安全的机制,类似Vector,所以到此为止synchronizedList与Vector的区别就是ArrayList与Vector的增量速度区别,所以需要线程安全操作时,增量比较快的时候推荐使用Vector,其他就没什么了
但是注意一点,
* It is imperative that the user manually synchronize on the returned * list when iterating over it: * <pre> * List list = Collections.synchronizedList(new ArrayList()); * ... * synchronized(list) { * Iterator i = list.iterator(); // Must be in synchronized block * while (i.hasNext()) * foo(i.next()); * }
synchronizedList在迭代的时候,需要开发者自己加上线程锁控制代码,为什么呢?
首先讲下为什么要手动加线程锁代码:
public boolean addAll(int index, Collection<? extends E> c) { synchronized(mutex) {return list.addAll(index, c);} } public ListIterator<E> listIterator() { return list.listIterator(); // Must be manually synched by user }
因为迭代器涉及的代码没有在java api中没有加上线程同步代码
原因:整个迭代的过程中如果在循环外面不加同步代码,在一次次迭代之间,其他线程对于这个容器的add或者remove会影响整个迭代的预期效果,所以这里需要用户在整个循环外面加上synchronized(list)
0 0
- ArrayList和Vector以及synchronizedList
- ArrayList和Vector以及synchronizedList
- ArrayList和Vector以及synchronizedList
- Vector,ArrayList,LinkedList,SynchronizedList
- Vector,ArrayList,LinkedList,SynchronizedList
- Vector,ArrayList,LinkedList,SynchronizedList
- Vector,ArrayList,LinkedList,SynchronizedList
- SynchronizedList和Vector的区别
- ArrayList和Vector以及LinkedList
- Java集合类ArrayList、LinkedList、vector、SynchronizedList详解
- ArrayList和Vector以及HashTable和HashMap区别
- 1.Java的集合类 2.Vector,ArrayList,LinkedList,SynchronizedList 3.HashMap与ConcurrentHashMap的区别
- JDK源码-CopyOnWriteArrayList.java 顺带 ArrayList Vector Collections.synchronizedList(List list)
- Java中Vector和ArrayList以及LinkedList的区别
- ArrayList和Vector区别以及其扩容机制
- vector 和 ArrayList
- [翻译] vector 和 ArrayList
- 小议Vector和ArrayList
- JSTL标签 参考手册
- Android AppUasge统计一招制敌
- [bzoj1031][JSOI2007]字符加密Cipher 后缀数组
- 如何使用github
- 蓝屏代码大全
- ArrayList和Vector以及synchronizedList
- SCORM标准及支持SCORM标准学习平台的设计
- Android开发之-- 利用百度sdk实现在app中提示其更新
- 2个DIV切换显示
- iOSAPP前台后台切换的处理
- Lua IO库详解
- jQuery六章 使用jQuery操作DOM
- react-native Linking
- poj1175 搜索+hash