158 lines
2.6 KiB
JavaScript
158 lines
2.6 KiB
JavaScript
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()
|
|
}
|