vector.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 916 行 · 第 1/2 页
JAVA
916 行
System.arraycopy(elementData, index, elementData, index + 1,
elementCount - index);
elementCount++;
elementData[index] = obj;
}
/**
* 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);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?