ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/concurrent/CopyOnWriteArrayList.java
(Generate patch)

Comparing jsr166/src/main/java/util/concurrent/CopyOnWriteArrayList.java (file contents):
Revision 1.42 by dl, Sun Jun 5 13:53:25 2005 UTC vs.
Revision 1.43 by dl, Wed Jun 8 12:58:59 2005 UTC

# Line 138 | Line 138 | public class CopyOnWriteArrayList<E>
138          return size() == 0;
139      }
140  
141 +    
142 +    /**
143 +     * Test for equality, coping with nulls.
144 +     */
145 +    private static boolean eq(Object o1, Object o2) {
146 +        return (o1 == null ? o2 == null : o1.equals(o2));
147 +    }
148 +
149      /**
150       * static version of indexOf, to allow repeated calls without
151       * needing to re-acquire array each time.
# Line 363 | Line 371 | public class CopyOnWriteArrayList<E>
371              int len = elements.length;
372              Object oldValue = elements[index];
373  
374 <            if (oldValue != element &&
367 <                (element == null || !element.equals(oldValue))) {
374 >            if (oldValue != element) {
375                  Object[] newElements = copyOf(elements, len);
376                  newElements[index] = element;
377                  setArray(newElements);
# Line 486 | Line 493 | public class CopyOnWriteArrayList<E>
493                  Object[] newElements = new Object[newlen];
494  
495                  for (int i = 0; i < newlen; ++i) {
496 <                    if (o == elements[i] ||
490 <                        (o != null && o.equals(elements[i]))) {
496 >                    if (eq(o, elements[i])) {
497                          // found one;  copy remaining and exit
498                          for (int k = i + 1; k < len; ++k)
499                              newElements[k - 1] = elements[k];
# Line 498 | Line 504 | public class CopyOnWriteArrayList<E>
504                  }
505  
506                  // special handling for last cell
507 <                if (o == elements[newlen] ||
502 <                    (o != null && o.equals(elements[newlen]))) {
507 >                if (eq(o, elements[newlen])) {
508                      setArray(newElements);
509                      return true;
510                  }
# Line 565 | Line 570 | public class CopyOnWriteArrayList<E>
570              int len = elements.length;
571              Object[] newElements = new Object[len + 1];
572              for (int i = 0; i < len; ++i) {
573 <                if (e == elements[i] || (e != null && e.equals(elements[i])))
573 >                if (eq(e, elements[i]))
574                      return false; // exit, throwing away copy
575                  else
576                      newElements[i] = elements[i];
# Line 861 | Line 866 | public class CopyOnWriteArrayList<E>
866      public String toString() {
867          Object[] elements = getArray();
868          int maxIndex = elements.length - 1;
869 <        StringBuffer buf = new StringBuffer();
870 <        buf.append("[");
869 >        StringBuilder sb = new StringBuilder();
870 >        sb.append("[");
871          for (int i = 0; i <= maxIndex; i++) {
872 <            buf.append(String.valueOf(elements[i]));
872 >            sb.append(String.valueOf(elements[i]));
873              if (i < maxIndex)
874 <                buf.append(", ");
874 >                sb.append(", ");
875          }
876 <        buf.append("]");
877 <        return buf.toString();
876 >        sb.append("]");
877 >        return sb.toString();
878      }
879  
880      /**
# Line 891 | Line 896 | public class CopyOnWriteArrayList<E>
896          if (!(o instanceof List))
897              return false;
898  
899 <        List<E> l2 = (List<E>)(o);
899 >        List<?> l2 = (List<?>)(o);
900          if (size() != l2.size())
901              return false;
902  
903          ListIterator<?> e1 = listIterator();
904          ListIterator<?> e2 = l2.listIterator();
905          while (e1.hasNext()) {
906 <            Object o1 = e1.next();
902 <            Object o2 = e2.next();
903 <            if (!(o1 == null ? o2 == null : o1.equals(o2)))
906 >            if (!eq(e1.next(), e2.next()))
907                  return false;
908          }
909          return true;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines