Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2007 The Guava Authors
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package com.google.common.collect;
 
 
 import java.util.Set;
 
 import  javax.annotation.Nullable;

Implementation of ImmutableSet with exactly one element.

Author(s):
Kevin Bourrillion
Nick Kralevich
 
 @GwtCompatible(serializable = true, emulated = true)
 @SuppressWarnings("serial"// uses writeReplace(), not default serialization
 final class SingletonImmutableSet<E> extends ImmutableSet<E> {
 
   final transient E element;
   // This is transient because it will be recalculated on the first
   // call to hashCode().
   //
   // A race condition is avoided since threads will either see that the value
   // is zero and recalculate it themselves, or two threads will see it at
   // the same time, and both recalculate it.  If the cachedHashCode is 0,
   // it will always be recalculated, unfortunately.
   private transient int cachedHashCode;
 
   SingletonImmutableSet(E element) {
     this. = Preconditions.checkNotNull(element);
   }
 
   SingletonImmutableSet(E elementint hashCode) {
     // Guaranteed to be non-null by the presence of the pre-computed hash code.
     this. = element;
      = hashCode;
   }
 
   @Override
   public int size() {
     return 1;
   }
 
   @Override public boolean isEmpty() {
     return false;
   }
 
   @Override public boolean contains(Object target) {
     return .equals(target);
   }
 
   @Override public UnmodifiableIterator<E> iterator() {
     return Iterators.singletonIterator();
   }
 
   @Override boolean isPartialView() {
     return false;
   }
 
   @Override public Object[] toArray() {
     return new Object[] {  };
   }
 
   @Override public <T> T[] toArray(T[] array) {
     if (array.length == 0) {
       array = ObjectArrays.newArray(array, 1);
     } else if (array.length > 1) {
       array[1] = null;
     }
     // Writes will produce ArrayStoreException when the toArray() doc requires.
     Object[] objectArray = array;
     objectArray[0] = ;
     return array;
   }
 
   @Override public boolean equals(@Nullable Object object) {
     if (object == this) {
       return true;
     }
     if (object instanceof Set) {
       Set<?> that = (Set<?>) object;
       return that.size() == 1 && .equals(that.iterator().next());
    }
    return false;
  }
  @Override public final int hashCode() {
    // Racy single-check.
    int code = ;
    if (code == 0) {
       = code = .hashCode();
    }
    return code;
  }
  @Override boolean isHashCodeFast() {
    return  != 0;
  }
  @Override public String toString() {
    String elementToString = .toString();
    return new StringBuilder(elementToString.length() + 2)
        .append('[')
        .append(elementToString)
        .append(']')
        .toString();
  }
New to GrepCode? Check out our FAQ X