715 |
|
Object[] cs = c.toArray(); |
716 |
|
if (cs.length == 0) |
717 |
|
return 0; |
718 |
– |
Object[] uniq = new Object[cs.length]; |
718 |
|
final ReentrantLock lock = this.lock; |
719 |
|
lock.lock(); |
720 |
|
try { |
721 |
|
Object[] elements = getArray(); |
722 |
|
int len = elements.length; |
723 |
|
int added = 0; |
724 |
< |
for (int i = 0; i < cs.length; ++i) { // scan for duplicates |
724 |
> |
// uniquify and compact elements in cs |
725 |
> |
for (int i = 0; i < cs.length; ++i) { |
726 |
|
Object e = cs[i]; |
727 |
|
if (indexOf(e, elements, 0, len) < 0 && |
728 |
< |
indexOf(e, uniq, 0, added) < 0) |
729 |
< |
uniq[added++] = e; |
728 |
> |
indexOf(e, cs, 0, added) < 0) |
729 |
> |
cs[added++] = e; |
730 |
|
} |
731 |
|
if (added > 0) { |
732 |
|
Object[] newElements = Arrays.copyOf(elements, len + added); |
733 |
< |
System.arraycopy(uniq, 0, newElements, len, added); |
733 |
> |
System.arraycopy(cs, 0, newElements, len, added); |
734 |
|
setArray(newElements); |
735 |
|
} |
736 |
|
return added; |