vector.java
来自「《移动Agent技术》一书的所有章节源代码。」· Java 代码 · 共 566 行 · 第 1/2 页
JAVA
566 行
/*
* @(#)Vector.java 1.38 97/12/18
*
* Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the confidential and proprietary information of Sun
* Microsystems, Inc. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Sun.
*
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
* SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
* THIS SOFTWARE OR ITS DERIVATIVES.
*
* CopyrightVersion 1.1_beta
*
*/
package java.util;
/**
* The <code>Vector</code> 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
* <code>Vector</code> can grow or shrink as needed to accommodate
* adding and removing items after the <code>Vector</code> has been created.
* <p>
* Each vector tries to optimize storage management by maintaining a
* <code>capacity</code> and a <code>capacityIncrement</code>. The
* <code>capacity</code> is always at least as large as the vector
* size; it is usually larger because as components are added to the
* vector, the vector's storage increases in chunks the size of
* <code>capacityIncrement</code>. An application can increase the
* capacity of a vector before inserting a large number of
* components; this reduces the amount of incremental reallocation.
*
* @author Lee Boynton
* @author Jonathan Payne
* @version 1.38, 12/18/97
* @since JDK1.0
*/
public
class Vector implements Cloneable, java.io.Serializable {
/**
* The array buffer into which the components of the vector are
* stored. The capacity of the vector is the length of this array buffer.
*
* @since JDK1.0
*/
protected Object elementData[];
/**
* The number of valid components in the vector.
*
* @since JDK1.0
*/
protected int elementCount;
/**
* The amount by which the capacity of the vector is automatically
* incremented when its size becomes greater than its capacity. If
* the capacity increment is <code>0</code>, the capacity of the
* vector is doubled each time it needs to grow.
*
* @since JDK1.0
*/
protected int capacityIncrement;
/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = -2767605614048989439L;
/**
* Constructs an empty vector with the specified initial capacity and
* capacity increment.
*
* @param initialCapacity the initial capacity of the vector.
* @param capacityIncrement the amount by which the capacity is
* increased when the vector overflows.
* @since JDK1.0
*/
public Vector(int initialCapacity, int capacityIncrement) {
super();
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}
/**
* Constructs an empty vector with the specified initial capacity.
*
* @param initialCapacity the initial capacity of the vector.
* @since JDK1.0
*/
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
/**
* Constructs an empty vector.
*
* @since JDK1.0
*/
public Vector() {
this(10);
}
/**
* Copies the components of this vector into the specified array.
* The array must be big enough to hold all the objects in this vector.
*
* @param anArray the array into which the components get copied.
* @since JDK1.0
*/
public final synchronized void copyInto(Object anArray[]) {
int i = elementCount;
while (i-- > 0) {
anArray[i] = elementData[i];
}
}
/**
* Trims the capacity of this vector to be the vector's current
* size. An application can use this operation to minimize the
* storage of a vector.
*
* @since JDK1.0
*/
public final synchronized void trimToSize() {
int oldCapacity = elementData.length;
if (elementCount < oldCapacity) {
Object oldData[] = elementData;
elementData = new Object[elementCount];
System.arraycopy(oldData, 0, elementData, 0, elementCount);
}
}
/**
* Increases the capacity of this vector, if necessary, to ensure
* that it can hold at least the number of components specified by
* the minimum capacity argument.
*
* @param minCapacity the desired minimum capacity.
* @since JDK1.0
*/
public final synchronized void ensureCapacity(int minCapacity) {
if (minCapacity > elementData.length) {
ensureCapacityHelper(minCapacity);
}
}
/**
* This implements the unsynchronized semantics of ensureCapacity.
* Synchronized methods in this class can internally call this
* method for ensuring capacity without incurring the cost of an
* extra synchronization.
*
* @see java.util.Vector#ensureCapacity(int)
*/
private void ensureCapacityHelper(int minCapacity) {
int oldCapacity = elementData.length;
Object oldData[] = elementData;
int newCapacity = (capacityIncrement > 0) ?
(oldCapacity + capacityIncrement) : (oldCapacity * 2);
if (newCapacity < minCapacity) {
newCapacity = minCapacity;
}
elementData = new Object[newCapacity];
System.arraycopy(oldData, 0, elementData, 0, elementCount);
}
/**
* Sets the size of this vector. If the new size is greater than the
* current size, new <code>null</code> items are added to the end of
* the vector. If the new size is less than the current size, all
* components at index <code>newSize</code> and greater are discarded.
*
* @param newSize the new size of this vector.
* @since JDK1.0
*/
public final synchronized void setSize(int newSize) {
if ((newSize > elementCount) && (newSize > elementData.length)) {
ensureCapacityHelper(newSize);
} else {
for (int i = newSize ; i < elementCount ; i++) {
elementData[i] = null;
}
}
elementCount = newSize;
}
/**
* Returns the current capacity of this vector.
*
* @return the current capacity of this vector.
* @since JDK1.0
*/
public final int capacity() {
return elementData.length;
}
/**
* Returns the number of components in this vector.
*
* @return the number of components in this vector.
* @since JDK1.0
*/
public final int size() {
return elementCount;
}
/**
* Tests if this vector has no components.
*
* @return <code>true</code> if this vector has no components;
* <code>false</code> otherwise.
* @since JDK1.0
*/
public final boolean isEmpty() {
return elementCount == 0;
}
/**
* Returns an enumeration of the components of this vector.
*
* @return an enumeration of the components of this vector.
* @see java.util.Enumeration
* @since JDK1.0
*/
public final synchronized Enumeration elements() {
return new VectorEnumerator(this);
}
/**
* Tests if the specified object is a component in this vector.
*
* @param elem an object.
* @return <code>true</code> if the specified object is a component in
* this vector; <code>false</code> otherwise.
* @since JDK1.0
*/
public final boolean contains(Object elem) {
return indexOf(elem, 0) >= 0;
}
/**
* Searches for the first occurence of the given argument, testing
* for equality using the <code>equals</code> method.
*
* @param elem an object.
* @return the index of the first occurrence of the argument in this
* vector; returns <code>-1</code> if the object is not found.
* @see java.lang.Object#equals(java.lang.Object)
* @since JDK1.0
*/
public final int indexOf(Object elem) {
return indexOf(elem, 0);
}
/**
* Searches for the first occurence of the given argument, beginning
* the search at <code>index</code>, and testing for equality using
* the <code>equals</code> method.
*
* @param elem an object.
* @param index the index to start searching from.
* @return the index of the first occurrence of the object argument in
* this vector at position <code>index</code> or later in the
* vector; returns <code>-1</code> if the object is not found.
* @see java.lang.Object#equals(java.lang.Object)
* @since JDK1.0
*/
public final synchronized int indexOf(Object elem, int index) {
for (int i = index ; i < elementCount ; i++) {
if (elem.equals(elementData[i])) {
return i;
}
}
return -1;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?