`

<转>ArrayList与Vector的区别

    博客分类:
  • Java
阅读更多

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 也是后起之秀, 有着不一般的效率

分享到:
评论

相关推荐

    java String Vector简单初学者代码

    Vector&lt;String&gt; stringVector = new Vector&lt;&gt;(); while (scanner.hasNextLine()) { String input = scanner.nextLine(); if (input.isEmpty()) break; stringVector.add(input); } System.out.println("\n...

    ArrayList LinkedList Vector区别

    ArrayList LinkedList Vector 区别 ArrayList、LinkedList、Vector 是 Java 中常用的数据结构实现类,它们都实现了 List 接口,但它们在存储方式、性能、线程安全性等方面有着不同特点。 首先,ArrayList 和 ...

    Java JDK实例宝典

    &lt;br&gt;第1章 Java基础 &lt;br&gt;1.1 转换基本数据类型 &lt;br&gt;1.2 Java的运算符 &lt;br&gt;1.3 控制程序的流程 &lt;br&gt;1.4 计算阶乘 &lt;br&gt;1.5 实现命令行程序 &lt;br&gt;第2章 Java面向对象程序设计 &lt;br&gt;2. 1 复数类 &lt;br&gt;2. 2 equals.chashCode...

    ArrayList Vector LinkedList 区别与用法.

    ### ArrayList、Vector、LinkedList 的区别与用法详解 在Java编程中,选择合适的数据结构对于程序的性能至关重要。本文将深入探讨ArrayList、Vector和LinkedList三种集合类的特点与使用场景,帮助开发者更好地理解...

    ArrayList LinkedList Vector性能测试

    Vector与ArrayList类似,也是基于数组实现,但它提供了线程安全的操作。这意味着在多线程环境下,Vector的所有操作都会自动加锁,保证了并发安全。然而,这种安全性是以牺牲性能为代价的,因为每次操作都需要同步,...

    经典讲解List和ArrayList和Vector和HashTable和HashMap区别

    `Vector`也是`List`接口的实现,与`ArrayList`类似,但它是线程安全的。这意味着在多线程环境下,多个线程可以同时操作`Vector`而不会产生数据不一致的问题。但是,由于其同步机制,性能通常低于`ArrayList`。 4. ...

    Java中ArrayList和Vector的区别共2页.p

    - 在多线程环境中,如果需要线程安全的动态数组,可以选择Vector,但应考虑其性能影响,也可以考虑使用`Collections.synchronizedList(List&lt;T&gt; list)`将ArrayList转换为线程安全的列表,或者使用`...

    Vector 与ArrayList区别

    ### Vector 与 ArrayList 的区别详解 #### 一、前言 在 Java 集合框架中,`Vector` 和 `ArrayList` 是两种常用的动态数组实现。它们提供了灵活的数据存储方式,能够根据需要自动调整大小。然而,这两种类型的列表...

    蓝桥杯java历年真题及答案整理(共129道题目及答案).doc

    private void fullPermutation(Vector&lt;Character&gt; sourse, Vector&lt;Character&gt; result) { if (sourse.size() == 0) { for (int i = 0; i &lt; result.size(); i++) { System.out.print(result.elementAt(i)); } ...

    PMD总结文档

    例如,vector&lt;String&gt; keys = new vector&lt;String&gt;(ELE)应该改为List&lt;String&gt; keys = new ArrayList&lt;String&gt;(ELE)。 7. 非final变量名不能包含下划线 在Java中,非final变量名不能包含下划线。例如,private int ...

    ArrayList LinkedList Vector性能对比

    Vector的扩容策略与ArrayList相同,只是其默认初始容量和增长因子不同于ArrayList。 在选择这三个类时,应考虑以下几个因素: 1. **性能**:如果需要频繁的随机访问,ArrayList通常是更好的选择;如果插入和删除...

    ArrayList、Vector、LinkedList 的区别.docx

    ArrayList、Vector、LinkedList 的区别 在 Java 集合框架中,ArrayList、Vector、LinkedList 是三个常用的 List 实现类,虽然它们都实现了 List 接口,但是它们在继承关系、实现接口、底层数据结构、扩容机制等方面...

    ArrayList LinkList和vector的区别

    ArrayList、LinkList和Vector的区别 ArrayList、LinkList和Vector是Java中三个常用的集合类,它们都实现了List接口,但是在实现方式和性能上有所不同。 ArrayList ArrayList是使用数组方式存储数据的,数组元素数...

    List、ArrayList、Vector及map、HashTable、HashMap分别的区别

    List、ArrayList、Vector及map、HashTable、HashMap分别的区别 List、ArrayList、Vector及map、HashTable、HashMap是Java容器类中的几个重要的接口和实现类,了解它们之间的区别是非常重要的。 首先,我们来看List...

    Java中ArrayList的使用方法以及与vector的对比

    Java 中 ArrayList 的使用方法以及与 Vector 的对比 ArrayList 是 Java 中的一种动态数组,它提供了很多有用的特性,例如动态地增加和减少元素,实现了 ICollection 和 IList 接口,灵活的设置数组的大小等。下面...

    ArrayList 和 Vector 的区别和常用方法

    ArrayList 和 Vector 的区别和常用方法

    modernizer-maven-plugin:检测旧版Java API的使用

    例如,Modernizer可以检测使用Vector而不是ArrayList , String.getBytes(String)而不是String.getBytes(Charset)以及Guava Objects.equal而不是Java 7 Objects.equals 。 默认配置检测 ,包括第三方库,如 , 和 ...

    Java容器类List、ArrayList、Vector及map、HashTable应用

    ArrayList和Vector的主要区别在于Vector使用了synchronized方法,线程安全,而ArrayList则没有。 ArrayList是Java中最常用的List实现类,它提供了高效的插入、删除和遍历元素的方法。ArrayList基于数组实现,故插入...

    Java中Vector与ArrayList的区别详解

    Java中的ArrayList和Vector都是列表(List)接口的实现类,它们在功能上相似,但在细节上存在一些重要的差异。这两个类都是基于数组实现的,但它们的性能特点、线程安全性和扩容策略有所不同。 1. **扩容策略**: ...

    JDK1.6中Arraylist,Vector,LinkedList源码

    Vector与ArrayList类似,也是基于动态数组,但它添加了线程安全的同步控制。每个方法都通过synchronized关键字进行了同步,确保了多线程环境下的安全性。但是,这种全局锁可能导致多个线程无法并行执行,降低了并发...

Global site tag (gtag.js) - Google Analytics