📄 vector.java
字号:
/* * Copyright 1995-2002 by Sun Microsystems, Inc., * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. * 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. * Use is subject to license terms. */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. * <p> * Note: To conserve space, the CLDC implementation * is based on JDK 1.1.8, not JDK 1.3. * * @author Lee Boynton * @author Jonathan Payne * @version 1.39, 07/01/98 (CLDC 1.0, Spring 2000) * @since JDK1.0, CLDC 1.0 */publicclass Vector { /** * 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; /** * 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. * @exception IllegalArgumentException if the specified initial capacity * is negative */ public Vector(int initialCapacity, int capacityIncrement) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); 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 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 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 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 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 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 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 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 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 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 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 synchronized int indexOf(Object elem, int index) { if (elem == null) { for (int i = index ; i < elementCount ; i++) if (elementData[i]==null) return i; } else { for (int i = index ; i < elementCount ; i++) if (elem.equals(elementData[i])) return i; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -