arraylist和vector有啥区别

madezhemafan 2010-09-07 04:01:44
还有 this 和接口有什么具体作用
...全文
469 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
骑猪去东莞 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 ysj300 的回复:]

ArrayList是线程不安全的,Vector是线程安全的,这个大家都知道。
因为Vector是线程安全的,所有在Vector当中的所有方法也都是线程安全的,所有在使用它的
时候非常占用空间,会导致效率降低25%左右。在以前我们需要使用多线程的时候我们一般情况下使用它,但是在现在jdk1.2版本上的使用Collections.sychronizedList(list)返回一个线程安全的Lis……
[/Quote]
正解,给点分就行.我是来接分的
steadyman 2010-09-09
  • 打赏
  • 举报
回复
Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。

  Vector继承自AtrastractList,实现了 Serializable, Cloneable, Iterable, Collection, List, RandomAccess 的接口。

  每个Vector会试图通过维护 capacity 和 capacityIncrement 来优化存储管理。capacity 始终至少应与向量的大小相等;这个值通常比后者大些,因为随着将组件添加到向量中,其存储将按 capacityIncrement 的大小增加存储块。应用程序可以在插入大量组件前增加向量的容量;这样就减少了增加的重分配的量。

  构造函数Vector(),实现一个空向量,其内部数组大小为10,标准容量增量为0。

  目前看来,Vector和ArrayList很像,二者的区别可参见以下比较

  Vector 和 ArrayList的不同

  有的时候 Vector更好一些;有的时候ArrayList 更好一些;有的时候你一个也不想用。但愿,你不是在期望一个简单明了的答案,因为答案因你在用他们做什么而定。下面是要考虑的四个方面:

  API

  同步-Synchronization

  数据增长-Data growth

  使用方法-Usage patterns

  让我一个一个来解释吧。

  API

  在The Java Programming Language (Addison-Wesley, June 2000) 中Ken Arnold, James Gosling, 和 David Holmes 是这样描述Vector的,它是更ArrayList类似的一个东西,所以从API的观点来看,它们俩是很相似的。但是,它们之间还是有些微的差别的。

  Synchronization

  Vectors是可同步化的,意思就是说,任何操作Vector的内容的方法都是线程安全的,相反的,另一方面,ArrayList是不可同步化的,所以也不是线程安全的。如果你知道了这些的话,你就会发现,Vector的同步会让它在性能发方面有一些小问题。所以,如果你不需要线程安全的话,那么就使用ArrayList吧。为什么要为没有必要的同步付出代价呢?

  Data growth

  实际上,不管是ArrayList还是Vector,在它们内部都是使用一个Array来保存数据的。编程过程中,在使用它们任何一个的时候,你都需要记住这一点。你在往一个ArrayList或者Vector里插入一个元素的时候,如果内部数组空间不够了,这个对象(译者按:指的是你使用的ArrayList或者Vector)就要扩展它的大小。Vector在默认情况下是产生一个双倍大小,而ArrayList增加50%的大小。只要你合理的使用这些类,你就可以结束你在增加新的元素的时候所付出的性能代价。把对象(译者按:指的是你使用的ArrayList或者Vector)的初始化容量指定为你编程过程中所能用到的最大的容量总是最好的办法。仔细的指定容量,你可以避免以后改变内部Array容量,所要付出的代价。如果你并不知道到底有多少个数据,但是你知道数据的增长率,Vector确实有一点点优势,因为你可以指定增加值(译者按,如果没有猜错的话,作者说的方法应该是setSize(int newSize) Sets the size of this vector.)。

  Usage patterns

  ArrayList和Vector在从指定位置取得元素,从容器的末尾增加和删除元素都非常的有效,所有的这些操作都能在一个常数级的时间(O(1))内完成。但是从一个其他的位置增加和删除一个元素就显得颇为费时,差不多需要的时间为O(n-i),这里的n代表元素个数,i代表要增加和删除的元素所在的位置。这些操作需花费更多的时间,因为你需要挨个移动i和更高位置的元素。那么,以上这些到底说明了什么呢?

  这意味着,如果你取得一个元素,或者从数组末尾增加或删除一个元素的话,随便你使用Vector和ArrayList。如果你想要对数组内容做其他操作的话,那么就为自己找另一个容器吧。比如说,LinkedList可以在常数级时间(O(1))内为任意一个位置的元素增加和删除。但是,取得一个元素,会稍微慢一点,时间要用O(i) ,这个i是元素的位置。通过ArrayList也是很简单的,因为你可以简单使用一个索引,而不是构造一个iterator 。LinkedList也为每个插入的元素建立一个内部对象。所以,你也必须知道,同时产生了垃圾对象。

  最后,Practical Java (Addison-Wesley, Feb. 2000) Peter Haggar 里的“实践41“建议你使用一个普通的原始的数组来代替Vector和ArrayListe,特别是对效率优先的代码来说。通过使用数组(array),你可以避免同步,额外的方法调用,非理想化的大小改变。你付出的只是额外的开发时间
智鹿软件 2010-09-08
  • 打赏
  • 举报
回复
安全的效率低,效率高的不安全!
各有优缺!
卡卡罗西 2010-09-08
  • 打赏
  • 举报
回复
就ArrayList与Vector主要从二方面来说.

一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的

二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
jofy1004 2010-09-08
  • 打赏
  • 举报
回复
呃```都是高手`都说了`我就不再解释了
smallpig 2010-09-08
  • 打赏
  • 举报
回复
奉劝楼主买本JAVA编程思想看看,里面基础知识讲的很详细,对你会很有帮助的。
hbrains 2010-09-08
  • 打赏
  • 举报
回复
同步性Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
jason69181 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 madezhemafan 的回复:]
还有 this 和接口有什么具体作用
[/Quote]

this可用来指向当前对象.或者说在一个对象内部用this

关键字可用来指向对象本身.

接口[/b][b]则是 以interface 为关键字.

相当于一个抽象类.内部只有一些空的方法或空的构造函数

继承接口则需要重写这些方法或构造函数.
完美灬缺陷 2010-09-08
  • 打赏
  • 举报
回复
不了解,帮顶!
Zh 2010-09-08
  • 打赏
  • 举报
回复
ArrayList是非线程安全的,vector是线程安全的;
当需要增长是,Arraylist增长为原来的一半,vector增长为原来的一倍
shehun 2010-09-08
  • 打赏
  • 举报
回复
ArrayList不是线程安全的,Vector是线程安全的
bekeer 2010-09-08
  • 打赏
  • 举报
回复
建议这些概念性的东西 自己先看书 当看书的时候有不懂的地方在问
现在就算thinking java的作者来给你说也说不清
24K純帥 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 healer_kx 的回复:]
ArrayList和Vector,在多数情况下都是可以互换的,
ArrayList不是线程安全的,Vector是,但是前者用的更多。
[/Quote]
额,区别不大
  • 打赏
  • 举报
回复
ls说的好!不过大家貌似用ArrayList用的比较多。这线程本来就不安全@这是为什么呢?
xulehome 2010-09-08
  • 打赏
  • 举报
回复
ArrayList不是线程安全的,Vector是线程安全的
ysj300 2010-09-08
  • 打赏
  • 举报
回复
ArrayList是线程不安全的,Vector是线程安全的,这个大家都知道。
因为Vector是线程安全的,所有在Vector当中的所有方法也都是线程安全的,所有在使用它的
时候非常占用空间,会导致效率降低25%左右。在以前我们需要使用多线程的时候我们一般情况下使用它,但是在现在jdk1.2版本上的使用Collections.sychronizedList(list)返回一个线程安全的List,请查API中的Collections类
其他地方,两者都是相同的。
interface可以看成是一个插件,功能是增加一些类的功能。
this指的是当前。功能一是在出现多个相同名字的对象引用或者数据时,可以使用它指定我使用当前最近的需要的一个对象引用或者数据。功能二指定当前相同重载方法的一种直接引用。
以上是我个人理解。谢谢
hnxxhc 2010-09-07
  • 打赏
  • 举报
回复
ArrayList不是线程安全的,Vector是线程安全的
  • 打赏
  • 举报
回复
除了同步之外:

ArrayList 在内部数组容量不够的时候会扩充 50%,并且扩充量不能自行给定!
Vector 在不给定扩充量(两个 int 构造的第二个参数)时,会扩充原来大小的 100%
  • 打赏
  • 举报
回复
ArrayList不是线程安全的,Vector是线程安全的
closewbq 2010-09-07
  • 打赏
  • 举报
回复
网上一搜一大堆,还用100分!!!


加载更多回复(10)

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧