集合类位于包java.util.*,集合类存放的是对象的引用
Collections 和 Collection
Collections 是集合的包装类,例如 Integer一样,这个类提供了一系列用于操作集合的静态方法,Collections不能实例化,就像一个工具类
Collection 是集合类的一个接口, Set, List, Queue都实现了这个接口,其为各种具体的集合提供了最大化的统一操作方式
Vector ArrayList LinkedList
三者都实现了List接口,另外Vector ArrayList都是以Array为基础来实现的,而LinkedList的每个Node都含有data和nextNode两个元素
用途方面
Vector ArrayList更适合查询, LinkedList更适合添加与删除操作,原因下表:
Vector和ArrayList:
根据索引i查询数据,在队列的末尾增加/移除数据所用的代价是相同的,均为O(1)
而在队列的其他位置i增加/移除数据的代价则会增加至O(n-i),原因是其第i和i之后的元素都要进行位移操作,而位移操作的本质就是生成一个扩容后的原数组的拷贝,然后对这个拷贝从索引I开始进行ArrayCopy操作
LinkedList:
根据索引查询代价为O(i),在队列的末尾增加/移除数据所用的代价为O(i)
在队列的其他位置i增加/移除数据的代价则为O(1),因为额外操作里只要修改一个引用对象的nextNode就行了
Vector和ArrayList的几点区别
因此保存大量数据的时候Vector更有优势
Collections 和 Collection
Collections 是集合的包装类,例如 Integer一样,这个类提供了一系列用于操作集合的静态方法,Collections不能实例化,就像一个工具类
Collection 是集合类的一个接口, Set, List, Queue都实现了这个接口,其为各种具体的集合提供了最大化的统一操作方式
Vector ArrayList LinkedList
三者都实现了List接口,另外Vector ArrayList都是以Array为基础来实现的,而LinkedList的每个Node都含有data和nextNode两个元素
用途方面
Vector ArrayList更适合查询, LinkedList更适合添加与删除操作,原因下表:
Vector和ArrayList:
根据索引i查询数据,在队列的末尾增加/移除数据所用的代价是相同的,均为O(1)
而在队列的其他位置i增加/移除数据的代价则会增加至O(n-i),原因是其第i和i之后的元素都要进行位移操作,而位移操作的本质就是生成一个扩容后的原数组的拷贝,然后对这个拷贝从索引I开始进行ArrayCopy操作
LinkedList:
根据索引查询代价为O(i),在队列的末尾增加/移除数据所用的代价为O(i)
在队列的其他位置i增加/移除数据的代价则为O(1),因为额外操作里只要修改一个引用对象的nextNode就行了
Vector和ArrayList的几点区别
1.Vector 的方法上都带有synchronized关键字修饰,也就是大多数人说的它是线程安全的原因, 而ArrayList没有。
但是线程安全会带来额外的支出,因为不需要同步的时候,ArrayList性能比Vector好些.
另外对于复合性的操作,程序员仍需要使用synchronized block之类的手段以保证同步,这样的话真感觉大部分的时候还是ArrayList更好用些啊,要同步的时候大家都是用synchronized 块或者方法,不用同步的时候ArrayList的性能比Vector还快一些, 除了那种对于Vector的操作每次都是调用其一个方法就能完成的情况.....
2.在扩容方面,Vector每次扩容时容量都会增长为原来的一倍,ArrayList只会增长50%因此保存大量数据的时候Vector更有优势