一天一个类,一点也不累 之 Vector
一天一个类,一点也不累。
今天要说的是ArrayList的亲兄弟--Vector
亲兄弟?看看“族谱”
Class Vector<E>
java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.Vector<E>
All Implemented Interfaces:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
Direct Known Subclasses:
Stack
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
发现 他们俩就是亲兄弟啊~~
The Vector class implements a growable array of objects. Like an array, it contains components that can be accessed using an integer index. However, the size of a Vector can grow or shrink as needed to accommodate adding and removing items after the Vector has been create。
Vecotor 实现了可变的数组,和数组一样,提供了使用下标来访问对象。Vector创建之后,可以按照需求来增加或者收缩。
Each vector tries to optimize storage management by maintaining a capacity and a capacityIncrement.
使用capacity 和 capacityIncrecement实现存储空间的管理。capacity 容量,capacityIncrement 增长步长
1、他的构造方法有三种,
Vector() 默认的大小为10
Vector(Collection<? extends E> c)同样使用数组工具类Arrays的copyOf()
Vector(int initialCapacity, int capacityIncrement) 同时指定了容器的容量和增长步长。
2、实现了从Vector到数组的转换
copyInto(Object[] anArray);
3、一个很有情怀的方法
在构造函数中,我们有些时候,初始化容量的时候,会有很多剩余空间没被使用,这样的话,就浪费了(浪费可耻!!~)
给我们提供了一个方法,trimToSize()将容量的值,设置为当前容器的size.
其中的实现:
public synchronized void trimToSize() {
modCount++;
int oldCapacity = elementData.length;
if (elementCount < oldCapacity) {
elementData = Arrays.copyOf(elementData, elementCount);
}
可见他也是使用Arrays.copyOf(),需要将数据拷贝一次。所以也是很消耗时间的。
4、在这里我们也许要着重说一下Vector的增长方式
首先呢,在构造的时候我们可以指定,capacityIncrement;如果没有指定也可以后期使用函数来指定,
public synchronized void ensureCapacity(int minCapacity) //指定最小的增长;
其实这个Vector可以自动增长的,
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity); //【如果没有指定capacityIncrement,那么newCapacity = oldCapacity+oldCapacity;就是二倍增长!!!】
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}
这里就是讲这么多了,其实这个类还有好多的方法,这些方法和上次讲的ArrayList()种的方法是一样的使用,可以自行查看。
【重要】虽说好些方法和ArrayList()使用方法是一样的,但是大家可能发现了,这个类种几乎所有的方法都是synchronized同步的!!
这就是说相比ArrayList()这个是线程安全的。
【谢谢大家,欢迎指正。】
【转载请注明出处http://home.cnblogs.com/u/plxx/】
一天一个类,一点也不累 之 Vector的更多相关文章
- 一天一个类,一点也不累 之 Set接口
我们的口号是:一天一个类,一点也不累-- 再次回忆一下集合相关的类图. 官方API上这样介绍这个接口: A collection that contains no duplicate elements ...
- 一天一个类,一点也不累 之 LinkedList
我们的口号是,一天一个类,一点也不累 .. 今天要讲的是---LinkedList 首先,还是看看他的组织结构 Class LinkedList<E> java.lang.Object j ...
- 一天一个类,一点也不累之TreeSet
一天一个类,一点也不累. 现在要说的是---TreeSet public class TreeSet<E> extends AbstractSet<E> implements ...
- 一天一个类,一点也不累之HashSet
最近忙着一个小项目结题,故没能按时完成[一天一个类,一点也不累],还好项目优秀,算是对自己一点点的安慰和鼓励.~~~ 今天要说的是HashSet 既然是继承自Set,那么就必须有Set的一些属性,比如 ...
- java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)
当我们知道一个类的对象,或者知道一个类的路径,或者指导这个类的名称的时候我们可以获取到这个类的类对象 当我们仅仅知道一个类的类对象的时候我们依然无法操作这个类,因为我们不知道这个类的属性,类的方法.那 ...
- Java中是否可以调用一个类中的main方法?
前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...
- [转]自己写PHP扩展之创建一个类
原文:http://www.imsiren.com/archives/572 比如我们要创建一个类..PHP代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- 重写toString()方法来描述一个类
package com.zch.test; /* toString方法以及重写toString方法 toString方法是一个自我描述方法 方法本身返回的是该对象的实现类的 类名 + @ + hash ...
- Java中的一个类怎么调用另一个类中的方法
如果另一个类中的那个方法是私有的话,就不能直接调用到,如果是其他类型的话看情况,如果是静态的(static)话,直接用类名可以调用到,如果是非静态的,就需要利用另一个类的实例(也就是用那个类生成的对象 ...
随机推荐
- MVC设计模式JavaWeb实现
JSP开发模式 jsp开发模式的发展 1.模式1:(适合小型项目的技术的开发) a.第一版本号.纯jsp(封装数据.处理数据,显示数据) b.第二版本号,Jsp+JavaBean. ...
- Linux常用命令总结——文件管理
Linux中的目录 路径:也就是linux中的目录(文件夹)有绝对路径和相对路径 根目录:/ 用户主目录(home directory):位于/home目录下,用户登录时 工作目录(working d ...
- javascripts小结
1 NAN-isNaN():判断是否数值 2 数值转换 Number()-任何数据类型,parseInt(),parseFloat()-字符串 3数组转字符串 var a=["red&quo ...
- linux命令: patch
一. 针对单文件的patch: 我们以mkprj.sh.1和mkprj.sh两个文件为例: [root@localhost tst]# lsmkprj.sh.1 mkprj.sh 看两个文件的差异: ...
- Median of Two Sorted Arrays-分治法
题目意思很简单将两个有序数组合并之后的中位数找出来.题目要求使用log(m+n)的时间复杂度来做. 虽然言简意赅,但不得不承认这个题目我自己想了好久也没做出来,隐约觉得应该使用寻找第k大数的算法来做, ...
- YII2 Gridview
YII2 Gridview 部分使用规则 1.页面显示的时间戳转换 a. [ 'label'=>'创建日期', 'attribute' => 'created_at', 'filter' ...
- php随笔6-thinkphp OA系统 JS 实时显示当前时间
不多说,直入主题: JS. // JavaScript Document function showtime() { var today,hour,second,minute,year,month,d ...
- PHP学习笔记11-表单
处理GET请求 实现的功能是输入姓名后页面显示“Hello XXX” 创建html文件hello.html: <!DOCTYPE html> <html> <head l ...
- (转)跟我一起写MAKEFILE
概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...
- How do I Find Out Linux CPU Utilization?
From:http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html Whenever a Linux sys ...