📄 vector.java
字号:
/** * Adds an element to the Vector at the end of the Vector. The vector * is increased by ensureCapacity(size() + 1) if needed. * * @param obj the object to add to the Vector */ public synchronized void addElement(Object obj) { if (elementCount == elementData.length) ensureCapacity(elementCount + 1); modCount++; elementData[elementCount++] = obj; } /** * Removes the first (the lowestindex) occurance of the given object from * the Vector. If such a remove was performed (the object was found), true * is returned. If there was no such object, false is returned. * * @param obj the object to remove from the Vector * @return true if the Object was in the Vector, false otherwise * @see #remove(Object) */ public synchronized boolean removeElement(Object obj) { int idx = indexOf(obj, 0); if (idx >= 0) { remove(idx); return true; } return false; } /** * Removes all elements from the Vector. Note that this does not * resize the internal data array. * * @see #clear() */ public synchronized void removeAllElements() { if (elementCount == 0) return; modCount++; Arrays.fill(elementData, 0, elementCount, null); elementCount = 0; } /** * Creates a new Vector with the same contents as this one. The clone is * shallow; elements are not cloned. * * @return the clone of this vector */ public synchronized Object clone() { try { Vector clone = (Vector) super.clone(); clone.elementData = (Object[]) elementData.clone(); return clone; } catch (CloneNotSupportedException ex) { // Impossible to get here. throw new InternalError(ex.toString()); } } /** * Returns an Object array with the contents of this Vector, in the order * they are stored within this Vector. Note that the Object array returned * is not the internal data array, and that it holds only the elements * within the Vector. This is similar to creating a new Object[] with the * size of this Vector, then calling Vector.copyInto(yourArray). * * @return an Object[] containing the contents of this Vector in order * @since 1.2 */ public synchronized Object[] toArray() { Object[] newArray = new Object[elementCount]; copyInto(newArray); return newArray; } /** * Returns an array containing the contents of this Vector. * If the provided array is large enough, the contents are copied * into that array, and a null is placed in the position size(). * In this manner, you can obtain the size of a Vector by the position * of the null element, if you know the vector does not itself contain * null entries. If the array is not large enough, reflection is used * to create a bigger one of the same runtime type. * * @param a an array to copy the Vector into if large enough * @return an array with the contents of this Vector in order * @throws ArrayStoreException the runtime type of the provided array * cannot hold the elements of the Vector * @throws NullPointerException if <code>a</code> is null * @since 1.2 */ public synchronized Object[] toArray(Object[] a) { if (a.length < elementCount) a = (Object[]) Array.newInstance(a.getClass().getComponentType(), elementCount); else if (a.length > elementCount) a[elementCount] = null; System.arraycopy(elementData, 0, a, 0, elementCount); return a; } /** * Returns the element at position <code>index</code>. * * @param index the position from which an element will be retrieved * @return the element at that position * @throws ArrayIndexOutOfBoundsException index < 0 || index >= size() * @since 1.2 */ public Object get(int index) { return elementAt(index); } /** * Puts <code>element</code> into the Vector at position <code>index</code> * and returns the Object that previously occupied that position. * * @param index the index within the Vector to place the Object * @param element the Object to store in the Vector * @return the previous object at the specified index * @throws ArrayIndexOutOfBoundsException index < 0 || index >= size() * @since 1.2 */ public synchronized Object set(int index, Object element) { checkBoundExclusive(index); Object temp = elementData[index]; elementData[index] = element; return temp; } /** * Adds an object to the Vector. * * @param o the element to add to the Vector * @return true, as specified by List * @since 1.2 */ public boolean add(Object o) { addElement(o); return true; } /** * Removes the given Object from the Vector. If it exists, true * is returned, if not, false is returned. * * @param o the object to remove from the Vector * @return true if the Object existed in the Vector, false otherwise * @since 1.2 */ public boolean remove(Object o) { return removeElement(o); } /** * Adds an object at the specified index. Elements at or above * index are shifted up one position. * * @param index the index at which to add the element * @param element the element to add to the Vector * @throws ArrayIndexOutOfBoundsException index < 0 || index > size() * @since 1.2 */ public void add(int index, Object element) { insertElementAt(element, index); } /** * Removes the element at the specified index, and returns it. * * @param index the position from which to remove the element * @return the object removed * @throws ArrayIndexOutOfBoundsException index < 0 || index >= size() * @since 1.2 */ public synchronized Object remove(int index) { checkBoundExclusive(index); Object temp = elementData[index]; modCount++; elementCount--; if (index < elementCount) System.arraycopy(elementData, index + 1, elementData, index, elementCount - index); elementData[elementCount] = null; return temp; } /** * Clears all elements in the Vector and sets its size to 0. */ public void clear() { removeAllElements(); } /** * Returns true if this Vector contains all the elements in c. * * @param c the collection to compare to * @return true if this vector contains all elements of c * @throws NullPointerException if c is null * @since 1.2 */ public synchronized boolean containsAll(Collection c) { // Here just for the sychronization. return super.containsAll(c); } /** * Appends all elements of the given collection to the end of this Vector. * Behavior is undefined if the collection is modified during this operation * (for example, if this == c). * * @param c the collection to append * @return true if this vector changed, in other words c was not empty * @throws NullPointerException if c is null * @since 1.2 */ public synchronized boolean addAll(Collection c) { return addAll(elementCount, c); } /** * Remove from this vector all elements contained in the given collection. * * @param c the collection to filter out * @return true if this vector changed * @throws NullPointerException if c is null * @since 1.2 */ public synchronized boolean removeAll(Collection c) { if (c == null) throw new NullPointerException(); int i; int j; for (i = 0; i < elementCount; i++) if (c.contains(elementData[i])) break; if (i == elementCount) return false; modCount++; for (j = i++; i < elementCount; i++) if (! c.contains(elementData[i])) elementData[j++] = elementData[i]; elementCount -= i - j; return true; } /** * Retain in this vector only the elements contained in the given collection. * * @param c the collection to filter by * @return true if this vector changed * @throws NullPointerException if c is null * @since 1.2 */ public synchronized boolean retainAll(Collection c) { if (c == null) throw new NullPointerException(); int i; int j; for (i = 0; i < elementCount; i++) if (! c.contains(elementData[i])) break; if (i == elementCount) return false; modCount++; for (j = i++; i < elementCount; i++) if (c.contains(elementData[i])) elementData[j++] = elementData[i]; elementCount -= i - j; return true; } /** * Inserts all elements of the given collection at the given index of * this Vector. Behavior is undefined if the collection is modified during * this operation (for example, if this == c). * * @param c the collection to append * @return true if this vector changed, in other words c was not empty * @throws NullPointerException if c is null * @throws ArrayIndexOutOfBoundsException index < 0 || index > size() * @since 1.2 */ public synchronized boolean addAll(int index, Collection c) { checkBoundInclusive(index); Iterator itr = c.iterator(); int csize = c.size(); modCount++; ensureCapacity(elementCount + csize); int end = index + csize; if (elementCount > 0 && index != elementCount) System.arraycopy(elementData, index, elementData, end, elementCount - index); elementCount += csize; for ( ; index < end; index++) elementData[index] = itr.next(); return (csize > 0); } /** * Compares this to the given object. * * @param o the object to compare to * @return true if the two are equal * @since 1.2 */ public synchronized boolean equals(Object o) { // Here just for the sychronization. return super.equals(o); } /** * Computes the hashcode of this object. * * @return the hashcode * @since 1.2 */ public synchronized int hashCode() { // Here just for the sychronization. return super.hashCode(); } /** * Returns a string representation of this Vector in the form * "[element0, element1, ... elementN]". * * @return the String representation of this Vector */ public synchronized String toString() { // Here just for the sychronization. return super.toString(); } /** * Obtain a List view of a subsection of this list, from fromIndex * (inclusive) to toIndex (exclusive). If the two indices are equal, the * sublist is empty. The returned list is modifiable, and changes in one * reflect in the other. If this list is structurally modified in * any way other than through the returned list, the result of any subsequent * operations on the returned list is undefined. * <p> * * @param fromIndex the index that the returned list should start from * (inclusive) * @param toIndex the index that the returned list should go to (exclusive) * @return a List backed by a subsection of this vector * @throws IndexOutOfBoundsException if fromIndex < 0 * || toIndex > size() * @throws IllegalArgumentException if fromIndex > toIndex * @see ConcurrentModificationException * @since 1.2 */ public synchronized List subList(int fromIndex, int toIndex) { List sub = super.subList(fromIndex, toIndex); // We must specify the correct object to synchronize upon, hence the // use of a non-public API return new Collections.SynchronizedList(this, sub); } /** * Removes a range of elements from this list. * Does nothing when toIndex is equal to fromIndex. * * @param fromIndex the index to start deleting from (inclusive) * @param toIndex the index to delete up to (exclusive) * @throws IndexOutOfBoundsException if fromIndex > toIndex */ // This does not need to be synchronized, because it is only called through // clear() of a sublist, and clear() had already synchronized. protected void removeRange(int fromIndex, int toIndex) { int change = toIndex - fromIndex; if (change > 0) { modCount++; System.arraycopy(elementData, toIndex, elementData, fromIndex, elementCount - toIndex); int save = elementCount; elementCount -= change; Arrays.fill(elementData, elementCount, save, null); } else if (change < 0) throw new IndexOutOfBoundsException(); } /** * Checks that the index is in the range of possible elements (inclusive). * * @param index the index to check * @throws ArrayIndexOutOfBoundsException if index > size */ private void checkBoundInclusive(int index) { // Implementation note: we do not check for negative ranges here, since // use of a negative index will cause an ArrayIndexOutOfBoundsException // with no effort on our part. if (index > elementCount) throw new ArrayIndexOutOfBoundsException(index + " > " + elementCount); } /** * Checks that the index is in the range of existing elements (exclusive). * * @param index the index to check * @throws ArrayIndexOutOfBoundsException if index >= size */ private void checkBoundExclusive(int index) { // Implementation note: we do not check for negative ranges here, since // use of a negative index will cause an ArrayIndexOutOfBoundsException // with no effort on our part. if (index >= elementCount) throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount); } /** * Serializes this object to the given stream. * * @param s the stream to write to * @throws IOException if the underlying stream fails * @serialData just calls default write function */ private synchronized void writeObject(ObjectOutputStream s) throws IOException { s.defaultWriteObject(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -