set.scala

来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 132 行

SCALA
132
字号
/*                     __                                               *\**     ________ ___   / /  ___     Scala API                            ****    / __/ __// _ | / /  / _ |    (c) 2003-2007, LAMP/EPFL             ****  __\ \/ /__/ __ |/ /__/ __ |    http://scala-lang.org/               **** /____/\___/_/ |_/____/_/ | |                                         ****                          |/                                          **\*                                                                      */// $Id: Set.scala 13150 2007-10-26 17:26:45Z odersky $package scala.collection/** <p> *    A set is a collection that includes at most one of any object. *  </p> *  <p> *    This trait provides a limited interface, only allowing reading of elements. *    There are two extensions of this trait, in packages *    <code><a href="mutable$content.html" target="contentFrame"> *    scala.collection.mutable</a></code> *    and <code><a href="immutable$content.html" target="contentFrame"> *    scala.collection.immutable</a></code>, which provide functionality for *    adding and removing objects from the set. The trait in the first package is *    for sets that are modified destructively, whereas the trait in *    the second package is for immutable sets which create a new set *    when something is added or removed to them. * *  @author  Matthias Zenger *  @author  Martin Odersky *  @version 2.0, 01/01/2007 */trait Set[A] extends (A => Boolean) with Collection[A] {  /** Returns the number of elements in this set.   *   *  @return number of set elements.   */  def size: Int  /** Checks if this set contains element <code>elem</code>.   *   *  @param elem the element to check for membership.   *  @return     <code>true</code> iff <code>elem</code> is contained in   *              this set.   */  def contains(elem: A): Boolean  /** This method allows sets to be interpreted as predicates.   *  It returns <code>true</code>, iff this set contains element   *  <code>elem</code>.   *   *  @param elem the element to check for membership.   *  @return     <code>true</code> iff <code>elem</code> is contained in   *              this set.   */  def apply(elem: A): Boolean = contains(elem)  /** Checks if this set is empty.   *   *  @return <code>true</code> iff there is no element in the set.   */  override def isEmpty: Boolean = size == 0  /** Checks if this set is a subset of set <code>that</code>.   *   *  @param that another set.   *  @return     <code>true</code> iff the other set is a superset of   *              this set.   *  todo: rename to isSubsetOf     */  def subsetOf(that: Set[A]): Boolean = forall(that.contains)    @deprecated def *(that : Set[A]) : Set[A] = this ** that    /** Intersect. It computes an intersection with set <code>that</code>.   *  It removes all the elements that are not present in <code>that</code>.   *   *  @param that the set to intersect with   */  def **(that : Set[A]) : Set[A] = {     val min = Math.min(size, that.size)     val buf = new Array[A](min)     var count = 0     val i = elements     while (i.hasNext) {       val a = i.next       if (that.contains(a)) {         buf(count) = a         count += 1       }      }     if (count == size) this     else if (count == that.size) that     else {       import scala.collection.mutable.HashSet       val ret = new HashSet[A]       ret ++= buf.projection.take(count)       ret     }  }  /** Compares this set with another object and returns true, iff the   *  other object is also a set which contains the same elements as   *  this set.   *   *  @param that the other object   *  @note not necessarily run-time type safe.   *  @return     <code>true</code> iff this set and the other set   *              contain the same elements.   */  override def equals(that: Any): Boolean = that match {    case other: Set[_] =>      this.size == other.size && subsetOf(other.asInstanceOf[Set[A]])    case _ =>      false  }  override def hashCode() =    (0 /: this)((hash, e) => hash + e.hashCode())  override def toArray[B >: A]: Array[B] = {    val result = new Array[B](size)    copyToArray(result, 0)    result  }  /** Defines the prefix of this object's <code>toString</code> representation.   */  override protected def stringPrefix : String = "Set"}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?