1 |
|
/* |
2 |
|
* %W% %E% |
3 |
|
* |
4 |
< |
* Copyright 2005 Sun Microsystems, Inc. All rights reserved. |
4 |
> |
* Copyright 2006 Sun Microsystems, Inc. All rights reserved. |
5 |
|
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. |
6 |
|
*/ |
7 |
|
|
2221 |
|
public Object[] toArray() { return c.toArray(); } |
2222 |
|
public <T> T[] toArray(T[] a) { return c.toArray(a); } |
2223 |
|
public String toString() { return c.toString(); } |
2224 |
– |
public Iterator<E> iterator() { return c.iterator(); } |
2224 |
|
public boolean remove(Object o) { return c.remove(o); } |
2225 |
|
public boolean containsAll(Collection<?> coll) { |
2226 |
|
return c.containsAll(coll); |
2235 |
|
c.clear(); |
2236 |
|
} |
2237 |
|
|
2238 |
< |
public boolean add(E e){ |
2238 |
> |
public Iterator<E> iterator() { |
2239 |
> |
return new Iterator<E>() { |
2240 |
> |
private final Iterator<E> it = c.iterator(); |
2241 |
> |
public boolean hasNext() { return it.hasNext(); } |
2242 |
> |
public E next() { return it.next(); } |
2243 |
> |
public void remove() { it.remove(); }}; |
2244 |
> |
} |
2245 |
> |
|
2246 |
> |
public boolean add(E e){ |
2247 |
|
typeCheck(e); |
2248 |
|
return c.add(e); |
2249 |
|
} |
3203 |
|
* @see List#addAll(int, Collection) |
3204 |
|
*/ |
3205 |
|
public static <T> List<T> nCopies(int n, T o) { |
3206 |
+ |
if (n < 0) |
3207 |
+ |
throw new IllegalArgumentException("List length = " + n); |
3208 |
|
return new CopiesList<T>(n, o); |
3209 |
|
} |
3210 |
|
|
3217 |
|
{ |
3218 |
|
static final long serialVersionUID = 2739099268398711800L; |
3219 |
|
|
3220 |
< |
int n; |
3221 |
< |
E element; |
3220 |
> |
final int n; |
3221 |
> |
final E element; |
3222 |
|
|
3223 |
|
CopiesList(int n, E e) { |
3224 |
< |
if (n < 0) |
3216 |
< |
throw new IllegalArgumentException("List length = " + n); |
3224 |
> |
assert n >= 0; |
3225 |
|
this.n = n; |
3226 |
|
element = e; |
3227 |
|
} |
3234 |
|
return n != 0 && eq(obj, element); |
3235 |
|
} |
3236 |
|
|
3237 |
+ |
public int indexOf(Object o) { |
3238 |
+ |
return contains(o) ? 0 : -1; |
3239 |
+ |
} |
3240 |
+ |
|
3241 |
+ |
public int lastIndexOf(Object o) { |
3242 |
+ |
return contains(o) ? n - 1 : -1; |
3243 |
+ |
} |
3244 |
+ |
|
3245 |
|
public E get(int index) { |
3246 |
< |
if (index<0 || index>=n) |
3246 |
> |
if (index < 0 || index >= n) |
3247 |
|
throw new IndexOutOfBoundsException("Index: "+index+ |
3248 |
|
", Size: "+n); |
3249 |
|
return element; |
3250 |
|
} |
3251 |
+ |
|
3252 |
+ |
public Object[] toArray() { |
3253 |
+ |
final Object[] a = new Object[n]; |
3254 |
+ |
if (element != null) |
3255 |
+ |
Arrays.fill(a, 0, n, element); |
3256 |
+ |
return a; |
3257 |
+ |
} |
3258 |
+ |
|
3259 |
+ |
public <T> T[] toArray(T[] a) { |
3260 |
+ |
final int n = this.n; |
3261 |
+ |
if (a.length < n) { |
3262 |
+ |
a = (T[])java.lang.reflect.Array |
3263 |
+ |
.newInstance(a.getClass().getComponentType(), n); |
3264 |
+ |
if (element != null) |
3265 |
+ |
Arrays.fill(a, 0, n, element); |
3266 |
+ |
} else { |
3267 |
+ |
Arrays.fill(a, 0, n, element); |
3268 |
+ |
if (a.length > n) |
3269 |
+ |
a[n] = null; |
3270 |
+ |
} |
3271 |
+ |
return a; |
3272 |
+ |
} |
3273 |
+ |
|
3274 |
+ |
public List<E> subList(int fromIndex, int toIndex) { |
3275 |
+ |
if (fromIndex < 0) |
3276 |
+ |
throw new IndexOutOfBoundsException("fromIndex = " + fromIndex); |
3277 |
+ |
if (toIndex > n) |
3278 |
+ |
throw new IndexOutOfBoundsException("toIndex = " + toIndex); |
3279 |
+ |
if (fromIndex > toIndex) |
3280 |
+ |
throw new IllegalArgumentException("fromIndex(" + fromIndex + |
3281 |
+ |
") > toIndex(" + toIndex + ")"); |
3282 |
+ |
return new CopiesList(toIndex - fromIndex, element); |
3283 |
+ |
} |
3284 |
|
} |
3285 |
|
|
3286 |
|
/** |
3505 |
|
* </pre> |
3506 |
|
* |
3507 |
|
* @param c the collection into which <tt>elements</tt> are to be inserted |
3508 |
< |
* @param a the elements to insert into <tt>c</tt> |
3508 |
> |
* @param elements the elements to insert into <tt>c</tt> |
3509 |
|
* @return <tt>true</tt> if the collection changed as a result of the call |
3510 |
|
* @throws UnsupportedOperationException if <tt>c</tt> does not support |
3511 |
< |
* the <tt>add</tt> operation. |
3511 |
> |
* the <tt>add</tt> operation |
3512 |
|
* @throws NullPointerException if <tt>elements</tt> contains one or more |
3513 |
|
* null values and <tt>c</tt> does not permit null elements, or |
3514 |
|
* if <tt>c</tt> or <tt>elements</tt> are <tt>null</tt> |
3517 |
|
* @see Collection#addAll(Collection) |
3518 |
|
* @since 1.5 |
3519 |
|
*/ |
3520 |
< |
public static <T> boolean addAll(Collection<? super T> c, T... a) { |
3520 |
> |
public static <T> boolean addAll(Collection<? super T> c, T... elements) { |
3521 |
|
boolean result = false; |
3522 |
< |
for (T e : a) |
3523 |
< |
result |= c.add(e); |
3522 |
> |
for (T element : elements) |
3523 |
> |
result |= c.add(element); |
3524 |
|
return result; |
3525 |
|
} |
3526 |
|
|
3544 |
|
* to this method, and no reference to the map is retained, as illustrated |
3545 |
|
* in the following code fragment: |
3546 |
|
* <pre> |
3547 |
< |
* Set<Object> weakHashSet = Collections.asSet( |
3547 |
> |
* Set<Object> weakHashSet = Collections.newSetFromMap( |
3548 |
|
* new WeakHashMap<Object, Boolean>()); |
3549 |
|
* </pre> |
3550 |
|
* |
3551 |
|
* @param map the backing map |
3552 |
|
* @return the set backed by the map |
3553 |
|
* @throws IllegalArgumentException if <tt>map</tt> is not empty |
3554 |
+ |
* @since 1.6 |
3555 |
|
*/ |
3556 |
< |
public static <E> Set<E> asSet(Map<E, Boolean> map) { |
3557 |
< |
return new MapAsSet<E>(map); |
3556 |
> |
public static <E> Set<E> newSetFromMap(Map<E, Boolean> map) { |
3557 |
> |
return new SetFromMap<E>(map); |
3558 |
|
} |
3559 |
|
|
3560 |
< |
private static class MapAsSet<E> extends AbstractSet<E> |
3560 |
> |
private static class SetFromMap<E> extends AbstractSet<E> |
3561 |
|
implements Set<E>, Serializable |
3562 |
|
{ |
3563 |
|
private final Map<E, Boolean> m; // The backing map |
3564 |
|
private transient Set<E> keySet; // Its keySet |
3565 |
|
|
3566 |
< |
MapAsSet(Map<E, Boolean> map) { |
3566 |
> |
SetFromMap(Map<E, Boolean> map) { |
3567 |
|
if (!map.isEmpty()) |
3568 |
|
throw new IllegalArgumentException("Map is non-empty"); |
3569 |
|
m = map; |
3607 |
|
* <tt>remove</tt> is mapped to <tt>pop</tt> and so on. This |
3608 |
|
* view can be useful when you would like to use a method |
3609 |
|
* requiring a <tt>Queue</tt> but you need Lifo ordering. |
3610 |
< |
* @param deque the Deque |
3610 |
> |
* |
3611 |
> |
* @param deque the deque |
3612 |
|
* @return the queue |
3613 |
|
* @since 1.6 |
3614 |
|
*/ |
3621 |
|
private static final long serialVersionUID = 1802017725587941708L; |
3622 |
|
private final Deque<E> q; |
3623 |
|
AsLIFOQueue(Deque<E> q) { this.q = q; } |
3624 |
+ |
public boolean add(E e) { q.addFirst(e); return true; } |
3625 |
|
public boolean offer(E e) { return q.offerFirst(e); } |
3626 |
|
public E poll() { return q.pollFirst(); } |
3627 |
|
public E remove() { return q.removeFirst(); } |
3633 |
|
public Iterator<E> iterator() { return q.iterator(); } |
3634 |
|
public Object[] toArray() { return q.toArray(); } |
3635 |
|
public <T> T[] toArray(T[] a) { return q.toArray(a); } |
3584 |
– |
public boolean add(E e) { return q.offerFirst(e); } |
3636 |
|
public boolean remove(Object o) { return q.remove(o); } |
3637 |
|
public void clear() { q.clear(); } |
3638 |
|
} |