You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2007/06/06 13:09:00 UTC
svn commit: r544803 -
/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/ArrayList.java
Author: tellison
Date: Wed Jun 6 04:08:59 2007
New Revision: 544803
URL: http://svn.apache.org/viewvc?view=rev&rev=544803
Log:
Apply patch for HARMONY-4060 ([classlib][luni] Performance improvement of java.util.ArrayList)
Modified:
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/ArrayList.java
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/ArrayList.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/ArrayList.java?view=diff&rev=544803&r1=544802&r2=544803
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/ArrayList.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/ArrayList.java Wed Jun 6 04:08:59 2007
@@ -75,9 +75,11 @@
*/
public ArrayList(Collection<? extends E> collection) {
int size = collection.size();
- firstIndex = lastIndex = 0;
+ firstIndex = 0;
array = newElementArray(size + (size / 10));
- addAll(collection);
+ collection.toArray(array);
+ lastIndex = size;
+ modCount = 1;
}
@SuppressWarnings("unchecked")
@@ -201,12 +203,9 @@
}
if (growSize > 0) {
- Iterator<? extends E> it = collection.iterator();
- int index = location + firstIndex;
- int end = index + growSize;
- while (index < end) {
- array[index++] = it.next();
- }
+ Object[] dumparray = new Object[growSize];
+ collection.toArray(dumparray);
+ System.arraycopy(dumparray, 0, this.array, location+firstIndex, growSize);
modCount++;
return true;
}
@@ -227,11 +226,10 @@
if (lastIndex > array.length - growSize) {
growAtEnd(growSize);
}
- Iterator<? extends E> it = collection.iterator();
- int end = lastIndex + growSize;
- while (lastIndex < end) {
- array[lastIndex++] = it.next();
- }
+ Object[] dumparray = new Object[growSize];
+ collection.toArray(dumparray);
+ System.arraycopy(dumparray, 0, this.array, lastIndex, growSize);
+ lastIndex += growSize;
modCount++;
return true;
}
@@ -366,7 +364,7 @@
private void growAtFront(int required) {
int size = size();
- if (array.length - lastIndex >= required) {
+ if (array.length - lastIndex + firstIndex >= required) {
int newFirst = array.length - size;
if (size > 0) {
System.arraycopy(array, firstIndex, array, newFirst, size);
@@ -526,8 +524,26 @@
modCount++;
return result;
}
-
+
/**
+ * Removes the first one of the specified object in this list, if present.
+ *
+ * @param object
+ * the object to removes
+ * @return true if the list contains the object
+ * @see java.util.AbstractCollection#remove(java.lang.Object)
+ */
+ @Override
+ public boolean remove(Object object) {
+ int location = indexOf(object);
+ if (location >= 0) {
+ remove(location);
+ return true;
+ }
+ return false;
+ }
+
+ /**
* Removes the objects in the specified range from the start to the end, but
* not including the end index.
*