java.util.Vector
- public class Vector<E>
- extends AbstractList<E>
- implements List<E>, RandomAccess, Cloneable, java.io.Serializable
实例变量
- //保存元素的容器
- protected Object[] elementData;
- //元素的数量
- protected int elementCount;
- //容器扩容时的增量
- protected int capacityIncrement;
4个构造器
- //初始容量和容器扩容增量的构造器
- public Vector(int initialCapacity, int capacityIncrement) {
- super();
- if (initialCapacity < 0)
- throw new IllegalArgumentException("Illegal Capacity: "+
- initialCapacity);
- this.elementData = new Object[initialCapacity];
- this.capacityIncrement = capacityIncrement;
- }
- //只有初始容量的构造器,默认使用容器扩容增量为0,表示不指定,那么扩容时会变成原容量的2倍
- public Vector(int initialCapacity) {
- this(initialCapacity, 0);
- }
- 不指定初始容量,那么默认初始容量为10
- public Vector() {
- this(10);
- }
- //使用c构造Vector
- public Vector(Collection<? extends E> c) {
- elementData = c.toArray();
- elementCount = elementData.length;
- // c.toArray might (incorrectly) not return Object[] (see 6260652)
- if (elementData.getClass() != Object[].class)
- elementData = Arrays.copyOf(elementData, elementCount, Object[].class);
- }
扩容方法
- public synchronized void ensureCapacity(int minCapacity) {
- if (minCapacity > 0) {
- modCount++;
- ensureCapacityHelper(minCapacity);
- }
- }
- private void ensureCapacityHelper(int minCapacity) {
- // overflow-conscious code
- if (minCapacity - elementData.length > 0)
- grow(minCapacity);
- }
- private void grow(int minCapacity) {
- // overflow-conscious code
- int oldCapacity = elementData.length;
- int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
- capacityIncrement : oldCapacity);//如果capacityIncrement为0,那么newCapacity为oldCapacity * 2
- if (newCapacity - minCapacity < 0)
- newCapacity = minCapacity;
- if (newCapacity - MAX_ARRAY_SIZE > 0)
- newCapacity = hugeCapacity(minCapacity);
- elementData = Arrays.copyOf(elementData, newCapacity);
- }
设置容量
- public synchronized void setSize(int newSize) {
- modCount++;
- if (newSize > elementCount) {//如果新容量大于旧容量,扩容
- ensureCapacityHelper(newSize);
- } else {//否则,将超过新容量的部分都设置为null,注意容量没变,只是超出newSize的元素变成null
- for (int i = newSize ; i < elementCount ; i++) {
- elementData[i] = null;
- }
- }
- elementCount = newSize;
- }
2个迭代器,一个从头迭代到尾,一个从尾迭代到头
- private class Itr implements Iterator<E> {//正向迭代器,cursor为0
- int cursor; // index of next element to return
- int lastRet = -1; // index of last element returned; -1 if no such
- int expectedModCount = modCount;
- public boolean hasNext() {
- // Racy but within spec, since modifications are checked
- // within or after synchronization in next/previous
- return cursor != elementCount;
- }
- public E next() {
- synchronized (Vector.this) {
- checkForComodification();
- int i = cursor;
- if (i >= elementCount)
- throw new NoSuchElementException();
- cursor = i + 1;
- return elementData(lastRet = i);
- }
- }
- public void remove() {
- if (lastRet == -1)
- throw new IllegalStateException();
- synchronized (Vector.this) {
- checkForComodification();
- Vector.this.remove(lastRet);
- expectedModCount = modCount;
- }
- cursor = lastRet;
- lastRet = -1;
- }
- @Override
- public void forEachRemaining(Consumer<? super E> action) {
- Objects.requireNonNull(action);
- synchronized (Vector.this) {
- final int size = elementCount;
- int i = cursor;
- if (i >= size) {
- return;
- }
- @SuppressWarnings("unchecked")
- final E[] elementData = (E[]) Vector.this.elementData;
- if (i >= elementData.length) {
- throw new ConcurrentModificationException();
- }
- while (i != size && modCount == expectedModCount) {
- action.accept(elementData[i++]);
- }
- // update once at end of iteration to reduce heap write traffic
- cursor = i;
- lastRet = i - 1;
- checkForComodification();
- }
- }
- final void checkForComodification() {
- if (modCount != expectedModCount)
- throw new ConcurrentModificationException();
- }
- }
- final class ListItr extends Itr implements ListIterator<E> {//从index到头迭代
- ListItr(int index) {
- super();
- cursor = index;
- }
- public boolean hasPrevious() {
- return cursor != 0;
- }
- public int nextIndex() {
- return cursor;
- }
- public int previousIndex() {
- return cursor - 1;
- }
- public E previous() {
- synchronized (Vector.this) {
- checkForComodification();
- int i = cursor - 1;
- if (i < 0)
- throw new NoSuchElementException();
- cursor = i;
- return elementData(lastRet = i);
- }
- }
- public void set(E e) {
- if (lastRet == -1)
- throw new IllegalStateException();
- synchronized (Vector.this) {
- checkForComodification();
- Vector.this.set(lastRet, e);
- }
- }
- public void add(E e) {
- int i = cursor;
- synchronized (Vector.this) {
- checkForComodification();
- Vector.this.add(i, e);
- expectedModCount = modCount;
- }
- cursor = i + 1;
- lastRet = -1;
- }
- }
- @Override
- public synchronized void forEach(Consumer<? super E> action) {
- Objects.requireNonNull(action);
- final int expectedModCount = modCount;
- @SuppressWarnings("unchecked")
- final E[] elementData = (E[]) this.elementData;
- final int elementCount = this.elementCount;
- for (int i=0; modCount == expectedModCount && i < elementCount; i++) {
- action.accept(elementData[i]);
- }
- if (modCount != expectedModCount) {
- throw new ConcurrentModificationException();
- }
- }
- //index指定从哪个位置开始往前迭代
- public synchronized ListIterator<E> listIterator(int index) {
- if (index < 0 || index > elementCount)
- throw new IndexOutOfBoundsException("Index: "+index);
- return new ListItr(index);
- }
Vector是线程安全的,它的方法使用synchronized修饰,如果不需要线程安全,推荐使用ArrayList代替。
java.util.Vector的更多相关文章
- 【转】java.util.vector中的vector的详细用法
[转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...
- java.util.vector中的vector的详细用法
ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.util.*; /** * 演示Vector的使用.包括Vector的创 ...
- java.util.ArrayList、java.util.vector和java.util.LinkedList (JDK 1.8.0_111)
一.java.util.ArrayList 1.1 ArrayList 继承结构 ArrayList实现了RandomAccess,可以随机访问(其实就是通过数组下标访问):实现了Cloneable, ...
- java.util.Vector排序
Vector的排序: import java.util.*; class MyCompare implements Comparator //实现Comparator,定义自己的比较方法{public ...
- java.util.ArrayList,java.util.LinkedList,java.util.Vector的区别,使用场合.
下图是Collection的类继承图 从图中可以看出:Vector.ArrayList.LinkedList这三者都实现了List 接口.所有使用方式也很相似,主要区别在于实现方式的不同,所以对不同的 ...
- JDK源码阅读-------自学笔记(二十五)(java.util.Vector 自定义讲解)
Vector 向量 Vector简述 1).Vector底层是用数组实现的List 2).虽然线程安全,但是效率低,所以并不是安全就是好的 3).底层大量方法添加synchronized同步标记,sy ...
- JDK1.8源码(五)——java.util.Vector类
JDK1.8源码(五)--java.lang. https://www.cnblogs.com/IT-CPC/p/10897559.html
- Java中vector的使用详解
Vector 可实现自动增长的对象数组. java.util.vector提供了向量类(vector)以实现类似动态数组的功能.在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提 ...
- java util包概述
util是utiliy的缩写,意为多用途的,工具性质的包这个包中主要存放了:集合类(如ArrayList,HashMap等),随机数产生类,属性文件读取类,定时器类等类.这些类极大方便了Java编程, ...
随机推荐
- vm内核参数优化设置
http://www.cnblogs.com/wjoyxt/archive/2014/06/08/3777042.html (1)vm.overcommit_memory 执行grep -i com ...
- 用komodo建立python开发环境
配置 在菜单中选择Edit.Preferences. 代码自动完成 更改tab代表的空格数 括号自动关闭和语法检查 interactive shell 中文支持 缩写 点击菜单View.Tabs &a ...
- C++ atol
函数名: atol 功 能: 把字符串转换成长整型数 用 法: long atol(const char *nptr); 简介编辑 相关函数: atof,atoi,strtod,strtol,st ...
- find the nth digit
Problem Description 假设:S1 = 1S2 = 12S3 = 123S4 = 1234.........S9 = 123456789S10 = 1234567891S11 = 12 ...
- solr英文使用的基本分词器和过滤器配置
solr英文应用的基本分词器和过滤器配置 英文应用分词器和过滤器一般配置顺序 索引(index): 1:空格 WhitespaceTokenizer 2:过滤词(停用词,如:on.of.a.an ...
- 《MFC游戏开发》笔记九 游戏中的碰撞判定初步&怪物运动简单AI
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...
- Read / Write Excel file in Java using Apache POI
Read / Write Excel file in Java using Apache POI 2014-04-18 BY DINESH LEAVE A COMMENT About a year o ...
- java实现https,https接口请求
/**********************https 接口'*******************/ /** * 安全证书管理器 */public class MyX509TrustManager ...
- 剑指Offer44 扑克牌的顺子
/************************************************************************* > File Name: 44_Contin ...
- xcode6 真机运行报错 Command /usr/bin/codesign failed with exit code 1
解决方法: 百度下载‘iphone配置实用工具’, 打开此软件之后,选择预配置描述文件, 选中iphone过期和重复的描述文件,按delete键删除.然后重启xcode即可