1) vector
是线程同步
的,所以它也是线程安全
的,而arraylist
是线程异步
的,是不安全的
。如果不考虑到线程的安全因素,一般用
arraylist效率比较高。
2) 如果集合中的元素的数目大于目前集合数组的长度时,vector
增长率为目前数组长度的100%,
而arraylist
增长率为目前数组长度的50%
.如果在集合中使用数据量比较大的数据,用vector有一定的优势。
3) 如果查找一个指定位置的数据
,vector和arraylist使用的时间是相同
的,都是O(1)
,这个时候使用vector和arraylist都可
以。
而如果移动一个指定位置的数据花费的时间为O(n-i)n为总长度
,这个时候就应该考虑到使用linklist
,因为它移动一个指定位置的数据所花费
的时间为0(1),而查询一个指定位置的数据时花费的时间为0(i)
。
使用模式
在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据
或是在集合的末尾增加、移除一个元素所花费的时间是一样的
,这个时
间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i)
,其中n代表集合中元素的个数,i代表元素增
加或移除元素的索引位置。为什么会这样呢?因为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?
这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或
ArrayList都可以
。
如果是其他操作,你最好选择其他的集合操作类
。比如,LinkList
集合类在增加或移除集合中任何位置的元素所花费
的时间都是一样的—O(1),但它在索引一个元素的使用时比较慢O(i),其中i是索引的位置.
使用ArrayList
也很容易,因为你可以简单的使用索
引来代替创建iterator对象的操作。
LinkList
也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。
其实也可以使用一个简单的数组(Array
)来代替Vector
或ArrayList
。尤其是对于执行效率要求高的程序更应如此。
因为使用数组(Array
)避免了
同步、额外的方法调用和不必要的重新分配空间的操作。
vector同步arraylist不同步
vector的容器是按原容器的2倍递增
arraylist的容器是按原容器的3/2倍+1递增的
所以arraylist占的内存小一点
1)《Thinking
in
Java》上很明确地说了:Vector是一个java1.0/1.1遗留的类,是为了与老代码兼容而保留的。有了ArrayList以后,应该尽量使用
ArrayList而不是Vector。
2) 有人说,Vector可以同步,而ArrayList不能同步,是不对的。
正确的说法应该是:ArrayList(包括所有新一代的容器)可以选择性地使用同步,不需要时就不使用,而不是像Vector那样没有选择。
3) vector的同步是指方法上的同步,也就是说在他自己的方法里进行了同步,两个线程同时调用一个方法的时候不会出现问题,但如果一个线程里要想多次操作
vector而且不想在这个过程中被其他线程打扰的话,仍然需要手动加锁来控制.
所以除了必须要写java1.0/1.1兼容的代码,否则完全可以不考虑Vector
4) 在多线程访问的时候需要用到同步,一般情况下不用考虑.而且ArrayList的出现就是用来取代vector,在同步的情况下,可以使用下面的方法来得
到一个同步了的List
List list =
Collections.synchronizedList(new ArrayList());
synchronized(list) {
Iterator i = list.iterator(); // Must be in
synchronized block
while (i.hasNext()) foo(i.next());
}
取值的时候必须在synchronized中
感觉ArrayList的使用率要比Vector高很多, 而且它还可以适当地利用同步, 同时LinkList
也是后起之秀, 有着不一般的效率
分享到:
相关推荐
Vector<String> stringVector = new Vector<>(); while (scanner.hasNextLine()) { String input = scanner.nextLine(); if (input.isEmpty()) break; stringVector.add(input); } System.out.println("\n...
ArrayList LinkedList Vector 区别 ArrayList、LinkedList、Vector 是 Java 中常用的数据结构实现类,它们都实现了 List 接口,但它们在存储方式、性能、线程安全性等方面有着不同特点。 首先,ArrayList 和 ...
<br>第1章 Java基础 <br>1.1 转换基本数据类型 <br>1.2 Java的运算符 <br>1.3 控制程序的流程 <br>1.4 计算阶乘 <br>1.5 实现命令行程序 <br>第2章 Java面向对象程序设计 <br>2. 1 复数类 <br>2. 2 equals.chashCode...
### ArrayList、Vector、LinkedList 的区别与用法详解 在Java编程中,选择合适的数据结构对于程序的性能至关重要。本文将深入探讨ArrayList、Vector和LinkedList三种集合类的特点与使用场景,帮助开发者更好地理解...
Vector与ArrayList类似,也是基于数组实现,但它提供了线程安全的操作。这意味着在多线程环境下,Vector的所有操作都会自动加锁,保证了并发安全。然而,这种安全性是以牺牲性能为代价的,因为每次操作都需要同步,...
`Vector`也是`List`接口的实现,与`ArrayList`类似,但它是线程安全的。这意味着在多线程环境下,多个线程可以同时操作`Vector`而不会产生数据不一致的问题。但是,由于其同步机制,性能通常低于`ArrayList`。 4. ...
- 在多线程环境中,如果需要线程安全的动态数组,可以选择Vector,但应考虑其性能影响,也可以考虑使用`Collections.synchronizedList(List<T> list)`将ArrayList转换为线程安全的列表,或者使用`...
### Vector 与 ArrayList 的区别详解 #### 一、前言 在 Java 集合框架中,`Vector` 和 `ArrayList` 是两种常用的动态数组实现。它们提供了灵活的数据存储方式,能够根据需要自动调整大小。然而,这两种类型的列表...
private void fullPermutation(Vector<Character> sourse, Vector<Character> result) { if (sourse.size() == 0) { for (int i = 0; i < result.size(); i++) { System.out.print(result.elementAt(i)); } ...
例如,vector<String> keys = new vector<String>(ELE)应该改为List<String> keys = new ArrayList<String>(ELE)。 7. 非final变量名不能包含下划线 在Java中,非final变量名不能包含下划线。例如,private int ...
Vector的扩容策略与ArrayList相同,只是其默认初始容量和增长因子不同于ArrayList。 在选择这三个类时,应考虑以下几个因素: 1. **性能**:如果需要频繁的随机访问,ArrayList通常是更好的选择;如果插入和删除...
ArrayList、Vector、LinkedList 的区别 在 Java 集合框架中,ArrayList、Vector、LinkedList 是三个常用的 List 实现类,虽然它们都实现了 List 接口,但是它们在继承关系、实现接口、底层数据结构、扩容机制等方面...
ArrayList、LinkList和Vector的区别 ArrayList、LinkList和Vector是Java中三个常用的集合类,它们都实现了List接口,但是在实现方式和性能上有所不同。 ArrayList ArrayList是使用数组方式存储数据的,数组元素数...
List、ArrayList、Vector及map、HashTable、HashMap分别的区别 List、ArrayList、Vector及map、HashTable、HashMap是Java容器类中的几个重要的接口和实现类,了解它们之间的区别是非常重要的。 首先,我们来看List...
Java 中 ArrayList 的使用方法以及与 Vector 的对比 ArrayList 是 Java 中的一种动态数组,它提供了很多有用的特性,例如动态地增加和减少元素,实现了 ICollection 和 IList 接口,灵活的设置数组的大小等。下面...
ArrayList 和 Vector 的区别和常用方法
例如,Modernizer可以检测使用Vector而不是ArrayList , String.getBytes(String)而不是String.getBytes(Charset)以及Guava Objects.equal而不是Java 7 Objects.equals 。 默认配置检测 ,包括第三方库,如 , 和 ...
ArrayList和Vector的主要区别在于Vector使用了synchronized方法,线程安全,而ArrayList则没有。 ArrayList是Java中最常用的List实现类,它提供了高效的插入、删除和遍历元素的方法。ArrayList基于数组实现,故插入...
Java中的ArrayList和Vector都是列表(List)接口的实现类,它们在功能上相似,但在细节上存在一些重要的差异。这两个类都是基于数组实现的,但它们的性能特点、线程安全性和扩容策略有所不同。 1. **扩容策略**: ...
Vector与ArrayList类似,也是基于动态数组,但它添加了线程安全的同步控制。每个方法都通过synchronized关键字进行了同步,确保了多线程环境下的安全性。但是,这种全局锁可能导致多个线程无法并行执行,降低了并发...