Javolution 6.0.0 java
FastCollection.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.util;
10 
11 import static javolution.lang.Realtime.Limit.CONSTANT;
12 import static javolution.lang.Realtime.Limit.LINEAR;
13 import static javolution.lang.Realtime.Limit.N_SQUARE;
14 
15 import java.io.IOException;
16 import java.io.Serializable;
17 import java.util.Collection;
18 import java.util.Comparator;
19 import java.util.ConcurrentModificationException;
20 import java.util.Iterator;
21 
24 import javolution.lang.Realtime;
25 import javolution.text.Cursor;
47 
164 @Realtime
165 @DefaultTextFormat(FastCollection.Format.class)
166 public abstract class FastCollection<E> implements Collection<E>, Serializable {
167 
168  private static final long serialVersionUID = 0x600L; // Version.
169 
173  protected FastCollection() {}
174 
176  // Views.
177  //
178 
186  @Parallelizable(mutexFree = true, comment = "Except for write operations, all read operations are mutex-free.")
187  public FastCollection<E> atomic() {
188  return new AtomicCollectionImpl<E>(service());
189  }
190 
200  @Parallelizable(mutexFree = false, comment = "Use multiple-readers/single-writer lock.")
201  public FastCollection<E> shared() {
202  return new SharedCollectionImpl<E>(service());
203  }
204 
223  return new ParallelCollectionImpl<E>(service());
224  }
225 
231  return new SequentialCollectionImpl<E>(service());
232  }
233 
240  return new UnmodifiableCollectionImpl<E>(service());
241  }
242 
251  return new FilteredCollectionImpl<E>(service(), filter);
252  }
253 
260  return new MappedCollectionImpl<E, R>(service(), function);
261  }
262 
268  return new SortedCollectionImpl<E>(service(), comparator());
269  }
270 
275  public FastCollection<E> sorted(Comparator<? super E> cmp) {
276  return new SortedCollectionImpl<E>(service(), cmp);
277  }
278 
283  return new ReversedCollectionImpl<E>(service());
284  }
285 
294  return new DistinctCollectionImpl<E>(service());
295  }
296 
298  // Closure operations.
299  //
300 
313  @SuppressWarnings("unchecked")
314  @Realtime(limit = LINEAR)
315  public void perform(Consumer<? extends Collection<E>> action) {
316  service().perform((Consumer<CollectionService<E>>) action, service());
317  }
318 
332  @SuppressWarnings("unchecked")
333  @Realtime(limit = LINEAR)
334  public void update(Consumer<? extends Collection<E>> action) {
335  service().update((Consumer<CollectionService<E>>) action, service());
336  }
337 
345  @Realtime(limit = LINEAR)
346  public void forEach(final Consumer<? super E> consumer) {
347  perform(new Consumer<Collection<E>>() {
348  public void accept(Collection<E> view) {
349  Iterator<E> it = view.iterator();
350  while (it.hasNext()) {
351  consumer.accept(it.next());
352  }
353  }
354  });
355  }
356 
367  @Realtime(limit = LINEAR)
368  public boolean removeIf(final Predicate<? super E> filter) {
369  final boolean[] removed = new boolean[1];
370  update(new Consumer<Collection<E>>() {
371  public void accept(Collection<E> view) {
372  Iterator<E> it = view.iterator();
373  while (it.hasNext()) {
374  if (filter.test(it.next())) {
375  it.remove(); // Ok mutable iteration.
376  removed[0] = true;
377  }
378  }
379  }
380  });
381  return removed[0];
382  }
383 
395  @Realtime(limit = LINEAR)
396  public E reduce(Reducer<E> reducer) {
397  perform(reducer);
398  return reducer.get();
399  }
400 
402  // Collection operations.
403  //
404 
406  @Override
407  @Realtime(limit = LINEAR, comment = "May have to search the whole collection (e.g. distinct view).")
408  public boolean add(E element) {
409  return service().add(element);
410  }
411 
413  @Override
414  @Realtime(limit = LINEAR, comment = "May actually iterates the whole collection (e.g. filtered view).")
415  public boolean isEmpty() {
416  return iterator().hasNext();
417  }
418 
420  @Override
421  @Realtime(limit = LINEAR, comment = "Potentially counts the elements.")
422  public int size() {
423  return service().size();
424  }
425 
427  @Override
428  @Realtime(limit = LINEAR, comment = "Potentially removes elements one at a time.")
429  public void clear() {
430  service().clear();
431  }
432 
434  @Override
435  @Realtime(limit = LINEAR, comment = "Potentially searches the whole collection.")
436  public boolean contains(Object searched) {
437  return service().contains(searched);
438  }
439 
441  @Override
442  @Realtime(limit = LINEAR, comment = "Potentially searches the whole collection.")
443  public boolean remove(Object searched) {
444  return service().remove(searched);
445  }
446 
453  @Override
454  @Realtime(limit = N_SQUARE, comment = "Construction of the iterator may require sorting the elements (e.g. sorted view)")
455  public Iterator<E> iterator() {
456  return service().iterator();
457  }
458 
460  @Override
461  @Realtime(limit = LINEAR)
462  public boolean addAll(final Collection<? extends E> that) {
463  return service().addAll(that);
464  }
465 
467  @Override
468  @Realtime(limit = N_SQUARE)
469  public boolean containsAll(Collection<?> that) {
470  return service().containsAll(that);
471  }
472 
474  @Override
475  @Realtime(limit = N_SQUARE)
476  public boolean removeAll(final Collection<?> that) {
477  return service().removeAll(that);
478  }
479 
481  @Override
482  @Realtime(limit = N_SQUARE)
483  public boolean retainAll(final Collection<?> that) {
484  return service().retainAll(that);
485  }
486 
488  @Override
489  @Realtime(limit = LINEAR)
490  public Object[] toArray() {
491  return service().toArray();
492  }
493 
496  @Override
497  @Realtime(limit = LINEAR)
498  public <T> T[] toArray(final T[] array) {
499  return service().toArray(array);
500  }
501 
503  // Misc.
504  //
505 
513  @SuppressWarnings("unchecked")
514  @Realtime(limit = LINEAR)
515  public <T extends E> T any(Class<T> type) {
516  return (T) reduce((Reducer<E>) Reducers.any(type));
517  }
518 
527  @Realtime(limit = LINEAR)
528  public E min() {
529  return reduce(Reducers.min(comparator()));
530  }
531 
540  @Realtime(limit = LINEAR)
541  public E max() {
542  return reduce(Reducers.max(comparator()));
543  }
544 
551  @Realtime(limit = LINEAR)
552  public FastCollection<E> addAll(E... elements) {
553  for (E e : elements) {
554  add(e);
555  }
556  return this;
557  }
558 
563  @Realtime(limit = LINEAR)
564  public FastCollection<E> addAll(FastCollection<? extends E> that) {
565  addAll((Collection<? extends E>) that);
566  return this;
567  }
568 
573  @Realtime(limit = CONSTANT)
574  public Equality<? super E> comparator() {
575  return service().comparator();
576  }
577 
584  @Realtime(limit = CONSTANT)
585  public <T extends Collection<E>> Immutable<T> toImmutable() {
586  return new Immutable<T>() {
587  @SuppressWarnings("unchecked")
588  final T value = (T) unmodifiable();
589 
590  @Override
591  public T value() {
592  return value;
593  }
594 
595  };
596  }
597 
609  @Override
610  @Realtime(limit = LINEAR)
611  public boolean equals(Object obj) {
612  return service().equals(obj);
613  }
614 
623  @Override
624  @Realtime(limit = LINEAR)
625  public int hashCode() {
626  return service().hashCode();
627  }
628 
632  @Override
633  @Realtime(limit = LINEAR)
634  public String toString() {
635  return TextContext.getFormat(FastCollection.class).format(this);
636  }
637 
641  protected abstract CollectionService<E> service();
642 
647  protected static <E> CollectionService<E> serviceOf(
648  FastCollection<E> collection) {
649  return collection.service();
650  }
651 
653  // Textual format.
654  //
655 
663  public static class Format extends TextFormat<FastCollection<?>> {
664 
665  @Override
666  public FastCollection<Object> parse(CharSequence csq, Cursor cursor)
667  throws IllegalArgumentException {
668  throw new UnsupportedOperationException();
669  }
670 
671  @Override
672  public Appendable format(FastCollection<?> that, final Appendable dest)
673  throws IOException {
674  dest.append('[');
675  Class<?> elementType = null;
676  TextFormat<Object> format = null;
677  for (Object element : that) {
678  if (elementType == null) elementType = Void.class;
679  else dest.append(", "); // Not the first.
680  if (element == null) {
681  dest.append("null");
682  continue;
683  }
684  Class<?> cls = element.getClass();
685  if (elementType.equals(cls)) {
686  format.format(element, dest);
687  continue;
688  }
689  elementType = cls;
690  format = TextContext.getFormat(cls);
691  format.format(element, dest);
692  }
693  return dest.append(']');
694  }
695 
696  }
697 
698 }
javolution.text.TextContext.getFormat
static< T > TextFormat< T > getFormat(Class<? extends T > type)
Definition: TextContext.java:69
javolution.lang.Realtime.Limit.N_SQUARE
N_SQUARE
Definition: Realtime.java:110
javolution.lang.Parallelizable
Definition: Parallelizable.java:55
javolution
javolution.util.internal
javolution.util.service
Definition: BitSetService.java:9
javolution.lang.Realtime.Limit
Definition: Realtime.java:81
javolution.util.FastCollection.serviceOf
static< E > CollectionService< E > serviceOf(FastCollection< E > collection)
Definition: FastCollection.java:647
javolution.util.function.Reducers.max
static< E > Reducer< E > max(Comparator<? super E > comparator)
Definition: Reducers.java:80
javolution.util.internal.collection.MappedCollectionImpl
Definition: MappedCollectionImpl.java:21
javolution.util.internal.collection
Definition: AtomicCollectionImpl.java:9
javolution.util.FastCollection.sorted
FastCollection< E > sorted()
Definition: FastCollection.java:267
javolution.util.FastCollection.service
abstract CollectionService< E > service()
javolution.util.function.Consumer
Definition: Consumer.java:22
javolution.util.internal.collection.SharedCollectionImpl
Definition: SharedCollectionImpl.java:21
javolution.util.FastCollection.mapped
public< R > FastCollection< R > mapped(Function<? super E, ? extends R > function)
Definition: FastCollection.java:258
javolution.util.service.CollectionService
Definition: CollectionService.java:25
javolution.util.FastCollection.sequential
FastCollection< E > sequential()
Definition: FastCollection.java:230
javolution.util.FastCollection.distinct
FastCollection< E > distinct()
Definition: FastCollection.java:293
javolution.text.Cursor
Definition: Cursor.java:44
javolution.util.function.Equality
Definition: Equality.java:39
javolution.lang
Definition: Configurable.java:9
javolution.util.function.Equalities
Definition: Equalities.java:20
javolution.util.internal.collection.DistinctCollectionImpl
Definition: DistinctCollectionImpl.java:20
javolution.text
Definition: CharArray.java:9
javolution.util.FastCollection.reversed
FastCollection< E > reversed()
Definition: FastCollection.java:282
javolution.util.function.Predicate
Definition: Predicate.java:25
javolution.util.function.Reducers.min
static< E > Reducer< E > min(Comparator<? super E > comparator)
Definition: Reducers.java:117
javolution.util.internal.collection.AtomicCollectionImpl
Definition: AtomicCollectionImpl.java:21
javolution.util.function.Consumer.accept
void accept(T param)
javolution.util.FastCollection.unmodifiable
FastCollection< E > unmodifiable()
Definition: FastCollection.java:239
javolution.util.internal.collection.ParallelCollectionImpl
Definition: ParallelCollectionImpl.java:21
javolution.util.internal.collection.SequentialCollectionImpl
Definition: SequentialCollectionImpl.java:20
javolution.util.function
Definition: Consumer.java:9
javolution.lang.Realtime.Limit.LINEAR
LINEAR
Definition: Realtime.java:98
javolution.lang.Realtime.Limit.CONSTANT
CONSTANT
Definition: Realtime.java:86
javolution.util.internal.collection.ReversedCollectionImpl
Definition: ReversedCollectionImpl.java:19
javolution.lang.Realtime
Definition: Realtime.java:59
javolution.util.internal.collection.SortedCollectionImpl
Definition: SortedCollectionImpl.java:22
javolution.util.FastCollection.parallel
FastCollection< E > parallel()
Definition: FastCollection.java:222
javolution.util.FastCollection.FastCollection
FastCollection()
Definition: FastCollection.java:173
javolution.util.function.Reducers.any
static< E > Reducer< E > any(Class<? extends E > type)
Definition: Reducers.java:42
javolution.util.function.Reducers
Definition: Reducers.java:30
javolution.util.FastCollection.filtered
FastCollection< E > filtered(Predicate<? super E > filter)
Definition: FastCollection.java:250
javolution.util.FastCollection
Definition: FastCollection.java:166
javolution.util.FastCollection.Format
Definition: FastCollection.java:663
javolution.util.internal.collection.UnmodifiableCollectionImpl
Definition: UnmodifiableCollectionImpl.java:19
javolution.text.TextFormat.format
abstract Appendable format(T obj, Appendable dest)
javolution.text.DefaultTextFormat
Definition: DefaultTextFormat.java:53
javolution.text.TextFormat
Definition: TextFormat.java:52
javolution.util.FastCollection.Format.parse
FastCollection< Object > parse(CharSequence csq, Cursor cursor)
Definition: FastCollection.java:666
javolution.util.function.Function
Definition: Function.java:22
javolution.lang.Immutable
Definition: Immutable.java:38
javolution.util.internal.collection.FilteredCollectionImpl
Definition: FilteredCollectionImpl.java:20
javolution.util.FastCollection.sorted
FastCollection< E > sorted(Comparator<? super E > cmp)
Definition: FastCollection.java:275
javolution.util
Definition: FastBitSet.java:9
javolution.text.TextContext
Definition: TextContext.java:49
javolution.util.FastCollection.Format.format
Appendable format(FastCollection<?> that, final Appendable dest)
Definition: FastCollection.java:672
javolution.util.function.Reducer
Definition: Reducer.java:24