/** * Returns a list which is a concatenation of <code>times</code> times the receiver. * * @param times the number of times the receiver shall be copied. */ public ObjectArrayList times(int times) { ObjectArrayList newList = new ObjectArrayList(times * size); for (int i = times; --i >= 0; ) { newList.addAllOfFromTo(this, 0, size() - 1); } return newList; }
/** * Compares the specified Object with the receiver for equality. Returns true if and only if the * specified Object is also an ObjectArrayList, both lists have the same size, and all * corresponding pairs of elements in the two lists are the same. In other words, two lists are * defined to be equal if they contain the same elements in the same order. Tests elements for * equality or identity as specified by <tt>testForEquality</tt>. When testing for equality, two * elements <tt>e1</tt> and <tt>e2</tt> are <i>equal</i> if <tt>(e1==null ? e2==null : * e1.equals(e2))</tt>.) * * @param otherObj the Object to be compared for equality with the receiver. * @param testForEquality if true -> tests for equality, otherwise for identity. * @return true if the specified Object is equal to the receiver. */ public boolean equals(Object otherObj, boolean testForEquality) { // delta if (!(otherObj instanceof ObjectArrayList)) { return false; } if (this == otherObj) return true; if (otherObj == null) return false; ObjectArrayList other = (ObjectArrayList) otherObj; if (elements == other.elements()) return true; if (size != other.size()) return false; Object[] otherElements = other.elements(); Object[] theElements = elements; if (!testForEquality) { for (int i = size; --i >= 0; ) { if (theElements[i] != otherElements[i]) return false; } } else { for (int i = size; --i >= 0; ) { if (!(theElements[i] == null ? otherElements[i] == null : theElements[i].equals(otherElements[i]))) return false; } } return true; }
/** * Removes from the receiver all elements that are contained in the specified list. Tests for * equality or identity as specified by <code>testForEquality</code>. * * @param other the other list. * @param testForEquality if <code>true</code> -> test for equality, otherwise for identity. * @return <code>true</code> if the receiver changed as a result of the call. */ public boolean removeAll(ObjectArrayList other, boolean testForEquality) { if (other.size == 0) return false; // nothing to do int limit = other.size - 1; int j = 0; Object[] theElements = elements; for (int i = 0; i < size; i++) { if (other.indexOfFromTo(theElements[i], 0, limit, testForEquality) < 0) theElements[j++] = theElements[i]; } boolean modified = (j != size); setSize(j); return modified; }
/** * Returns a copy of the receiver such that the copy and the receiver <i>share</i> the same * elements, but do not share the same array to index them; So modifying an object in the copy * modifies the object in the receiver and vice versa; However, structurally modifying the copy * (for example changing its size, setting other objects at indexes, etc.) does not affect the * receiver and vice versa. * * @return a copy of the receiver. */ public Object clone() { ObjectArrayList v = (ObjectArrayList) super.clone(); v.elements = (Object[]) elements.clone(); return v; }