text: import Collection from './Collection'
  // import Iterator from './Iterator'
  import NoSuchElementException from './NoSuchElementException'
  import OperationNotSupported from './OperationNotSupported'
  import SortedSet from './SortedSet'
  
  /**
   * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html
   *
   * @extends {SortedSet}
   * @constructor
   * @private
   */
  export default function TreeSet () {
    /**
     * @type {Array}
     * @private
    */
    this.array_ = []
  
    if (arguments[0] instanceof Collection) {
      this.addAll(arguments[0])
    }
  };
  TreeSet.prototype = new SortedSet()
  
  /**
   * @override
   */
  TreeSet.prototype.contains = function (o) {
    for (var i = 0, len = this.array_.length; i < len; i++) {
      var e = this.array_[i]
      if (e['compareTo'](o) === 0) {
        return true
      }
    }
    return false
  }
  
  /**
   * @override
   */
  TreeSet.prototype.add = function (o) {
    if (this.contains(o)) {
      return false
    }
  
    for (var i = 0, len = this.array_.length; i < len; i++) {
      var e = this.array_[i]
      if (e['compareTo'](o) === 1) {
        this.array_.splice(i, 0, o)
        return true
      }
    }
  
    this.array_.push(o)
  
    return true
  }
  
  /**
   * @override
   */
  TreeSet.prototype.addAll = function (c) {
    for (var i = c.iterator(); i.hasNext();) {
      this.add(i.next())
    }
    return true
  }
  
  /**
   * @override
   */
  TreeSet.prototype.remove = function (e) {
    throw new OperationNotSupported()
  }
  
  /**
   * @override
   */
  TreeSet.prototype.size = function () {
    return this.array_.length
  }
  
  /**
   * @override
   */
  TreeSet.prototype.isEmpty = function () {
    return this.array_.length === 0
  }
  
  /**
   * @override
   */
  TreeSet.prototype.toArray = function () {
    var array = []
  
    for (var i = 0, len = this.array_.length; i < len; i++) {
      array.push(this.array_[i])
    }
  
    return array
  }
  
  /**
   * @override
   */
  TreeSet.prototype.iterator = function () {
    return new Iterator_(this)
  }
  
  /**
   * @extends {javascript.util.Iterator}
   * @param {javascript.util.TreeSet} treeSet
   * @constructor
   * @private
   */
  var Iterator_ = function (treeSet) {
    /**
     * @type {javascript.util.TreeSet}
     * @private
     */
    this.treeSet_ = treeSet
    /**
     * @type {number}
     * @private
     */
    this.position_ = 0
  }
  
  /**
   * @override
   */
  Iterator_.prototype.next = function () {
    if (this.position_ === this.treeSet_.size()) {
      throw new NoSuchElementException()
    }
    return this.treeSet_.array_[this.position_++]
  }
  
  /**
   * @override
   */
  Iterator_.prototype.hasNext = function () {
    if (this.position_ < this.treeSet_.size()) {
      return true
    } else {
      return false
    }
  }
  
  /**
   * @override
   */
  Iterator_.prototype.remove = function () {
    throw new OperationNotSupported()
  }
  