org.nd4j.common.collection.MultiDimensionalSet Maven / Gradle / Ivy
/*
* ******************************************************************************
* *
* *
* * This program and the accompanying materials are made available under the
* * terms of the Apache License, Version 2.0 which is available at
* * https://www.apache.org/licenses/LICENSE-2.0.
* *
* * See the NOTICE file distributed with this work for additional
* * information regarding copyright ownership.
* * 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.
* *
* * SPDX-License-Identifier: Apache-2.0
* *****************************************************************************
*/
package org.nd4j.common.collection;
import org.nd4j.common.primitives.Pair;
import java.util.*;
import java.util.concurrent.ConcurrentSkipListSet;
public class MultiDimensionalSet implements Set> {
private Set> backedSet;
public MultiDimensionalSet(Set> backedSet) {
this.backedSet = backedSet;
}
public static MultiDimensionalSet hashSet() {
return new MultiDimensionalSet<>(new HashSet>());
}
public static MultiDimensionalSet treeSet() {
return new MultiDimensionalSet<>(new TreeSet>());
}
public static MultiDimensionalSet concurrentSkipListSet() {
return new MultiDimensionalSet<>(new ConcurrentSkipListSet>());
}
/**
* Returns the number of elements in this applyTransformToDestination (its cardinality). If this
* applyTransformToDestination contains more than Integer.MAX_VALUE elements, returns
* Integer.MAX_VALUE.
*
* @return the number of elements in this applyTransformToDestination (its cardinality)
*/
@Override
public int size() {
return backedSet.size();
}
/**
* Returns true if this applyTransformToDestination contains no elements.
*
* @return true if this applyTransformToDestination contains no elements
*/
@Override
public boolean isEmpty() {
return backedSet.isEmpty();
}
/**
* Returns true if this applyTransformToDestination contains the specified element.
* More formally, returns true if and only if this applyTransformToDestination
* contains an element e such that
* (o==null ? e==null : o.equals(e)).
*
* @param o element whose presence in this applyTransformToDestination is to be tested
* @return true if this applyTransformToDestination contains the specified element
* @throws ClassCastException if the type of the specified element
* is incompatible with this applyTransformToDestination
* (optional)
* @throws NullPointerException if the specified element is null and this
* applyTransformToDestination does not permit null elements
* (optional)
*/
@Override
public boolean contains(Object o) {
return backedSet.contains(o);
}
/**
* Returns an iterator over the elements in this applyTransformToDestination. The elements are
* returned in no particular order (unless this applyTransformToDestination is an instance of some
* class that provides a guarantee).
*
* @return an iterator over the elements in this applyTransformToDestination
*/
@Override
public Iterator> iterator() {
return backedSet.iterator();
}
/**
* Returns an array containing all of the elements in this applyTransformToDestination.
* If this applyTransformToDestination makes any guarantees as to what order its elements
* are returned by its iterator, this method must return the
* elements in the same order.
*
* The returned array will be "safe" in that no references to it
* are maintained by this applyTransformToDestination. (In other words, this method must
* allocate a new array even if this applyTransformToDestination is backed by an array).
* The caller is thus free to modify the returned array.
*
* This method acts as bridge between array-based and collection-based
* APIs.
*
* @return an array containing all the elements in this applyTransformToDestination
*/
@Override
public Object[] toArray() {
return backedSet.toArray();
}
/**
* Returns an array containing all of the elements in this applyTransformToDestination; the
* runtime type of the returned array is that of the specified array.
* If the applyTransformToDestination fits in the specified array, it is returned therein.
* Otherwise, a new array is allocated with the runtime type of the
* specified array and the size of this applyTransformToDestination.
*
* If this applyTransformToDestination fits in the specified array with room to spare
* (i.e., the array has more elements than this applyTransformToDestination), the element in
* the array immediately following the end of the applyTransformToDestination is applyTransformToDestination to
* null. (This is useful in determining the length of this
* applyTransformToDestination only if the caller knows that this applyTransformToDestination does not contain
* any null elements.)
*
* If this applyTransformToDestination makes any guarantees as to what order its elements
* are returned by its iterator, this method must return the elements
* in the same order.
*
* Like the {@link #toArray()} method, this method acts as bridge between
* array-based and collection-based APIs. Further, this method allows
* precise control over the runtime type of the output array, and may,
* under certain circumstances, be used to save allocation costs.
*
* Suppose x is a applyTransformToDestination known to contain only strings.
* The following code can be used to dump the applyTransformToDestination into a newly allocated
* array of String:
*
*
* String[] y = x.toArray(new String[0]);
*
* Note that toArray(new Object[0]) is identical in function to
* toArray().
*
* @param a the array into which the elements of this applyTransformToDestination are to be
* stored, if it is big enough; otherwise, a new array of the same
* runtime type is allocated for this purpose.
* @return an array containing all the elements in this applyTransformToDestination
* @throws ArrayStoreException if the runtime type of the specified array
* is not a supertype of the runtime type of every element in this
* applyTransformToDestination
* @throws NullPointerException if the specified array is null
*/
@Override
public T[] toArray(T[] a) {
return backedSet.toArray(a);
}
/**
* Adds the specified element to this applyTransformToDestination if it is not already present
* (optional operation). More formally, adds the specified element
* e to this applyTransformToDestination if the applyTransformToDestination contains no element e2
* such that
* (e==null ? e2==null : e.equals(e2)).
* If this applyTransformToDestination already contains the element, the call leaves the applyTransformToDestination
* unchanged and returns false. In combination with the
* restriction on constructors, this ensures that sets never contain
* duplicate elements.
*
* The stipulation above does not imply that sets must accept all
* elements; sets may refuse to add any particular element, including
* null, and throw an exception, as described in the
* specification for {@link Collection#add Collection.add}.
* Individual applyTransformToDestination implementations should clearly document any
* restrictions on the elements that they may contain.
*
* @param kvPair element to be added to this applyTransformToDestination
* @return true if this applyTransformToDestination did not already contain the specified
* element
* @throws UnsupportedOperationException if the add operation
* is not supported by this applyTransformToDestination
* @throws ClassCastException if the class of the specified element
* prevents it from being added to this applyTransformToDestination
* @throws NullPointerException if the specified element is null and this
* applyTransformToDestination does not permit null elements
* @throws IllegalArgumentException if some property of the specified element
* prevents it from being added to this applyTransformToDestination
*/
@Override
public boolean add(Pair kvPair) {
return backedSet.add(kvPair);
}
/**
* Removes the specified element from this applyTransformToDestination if it is present
* (optional operation). More formally, removes an element e
* such that
* (o==null ? e==null : o.equals(e)), if
* this applyTransformToDestination contains such an element. Returns true if this applyTransformToDestination
* contained the element (or equivalently, if this applyTransformToDestination changed as a
* result of the call). (This applyTransformToDestination will not contain the element once the
* call returns.)
*
* @param o object to be removed from this applyTransformToDestination, if present
* @return true if this applyTransformToDestination contained the specified element
* @throws ClassCastException if the type of the specified element
* is incompatible with this applyTransformToDestination
* (optional)
* @throws NullPointerException if the specified element is null and this
* applyTransformToDestination does not permit null elements
* (optional)
* @throws UnsupportedOperationException if the remove operation
* is not supported by this applyTransformToDestination
*/
@Override
public boolean remove(Object o) {
return backedSet.remove(o);
}
/**
* Returns true if this applyTransformToDestination contains all of the elements of the
* specified collection. If the specified collection is also a applyTransformToDestination, this
* method returns true if it is a subset of this applyTransformToDestination.
*
* @param c collection to be checked for containment in this applyTransformToDestination
* @return true if this applyTransformToDestination contains all of the elements of the
* specified collection
* @throws ClassCastException if the types of one or more elements
* in the specified collection are incompatible with this
* applyTransformToDestination
* (optional)
* @throws NullPointerException if the specified collection contains one
* or more null elements and this applyTransformToDestination does not permit null
* elements
* (optional),
* or if the specified collection is null
* @see #contains(Object)
*/
@Override
public boolean containsAll(Collection> c) {
return backedSet.containsAll(c);
}
/**
* Adds all of the elements in the specified collection to this applyTransformToDestination if
* they're not already present (optional operation). If the specified
* collection is also a applyTransformToDestination, the addAll operation effectively
* modifies this applyTransformToDestination so that its value is the union of the two
* sets. The behavior of this operation is undefined if the specified
* collection is modified while the operation is in progress.
*
* @param c collection containing elements to be added to this applyTransformToDestination
* @return true if this applyTransformToDestination changed as a result of the call
* @throws UnsupportedOperationException if the addAll operation
* is not supported by this applyTransformToDestination
* @throws ClassCastException if the class of an element of the
* specified collection prevents it from being added to this applyTransformToDestination
* @throws NullPointerException if the specified collection contains one
* or more null elements and this applyTransformToDestination does not permit null
* elements, or if the specified collection is null
* @throws IllegalArgumentException if some property of an element of the
* specified collection prevents it from being added to this applyTransformToDestination
* @see #add(Object)
*/
@Override
public boolean addAll(Collection extends Pair> c) {
return backedSet.addAll(c);
}
/**
* Retains only the elements in this applyTransformToDestination that are contained in the
* specified collection (optional operation). In other words, removes
* from this applyTransformToDestination all of its elements that are not contained in the
* specified collection. If the specified collection is also a applyTransformToDestination, this
* operation effectively modifies this applyTransformToDestination so that its value is the
* intersection of the two sets.
*
* @param c collection containing elements to be retained in this applyTransformToDestination
* @return true if this applyTransformToDestination changed as a result of the call
* @throws UnsupportedOperationException if the retainAll operation
* is not supported by this applyTransformToDestination
* @throws ClassCastException if the class of an element of this applyTransformToDestination
* is incompatible with the specified collection
* (optional)
* @throws NullPointerException if this applyTransformToDestination contains a null element and the
* specified collection does not permit null elements
* (optional),
* or if the specified collection is null
* @see #remove(Object)
*/
@Override
public boolean retainAll(Collection> c) {
return backedSet.retainAll(c);
}
/**
* Removes from this applyTransformToDestination all of its elements that are contained in the
* specified collection (optional operation). If the specified
* collection is also a applyTransformToDestination, this operation effectively modifies this
* applyTransformToDestination so that its value is the asymmetric applyTransformToDestination difference of
* the two sets.
*
* @param c collection containing elements to be removed from this applyTransformToDestination
* @return true if this applyTransformToDestination changed as a result of the call
* @throws UnsupportedOperationException if the removeAll operation
* is not supported by this applyTransformToDestination
* @throws ClassCastException if the class of an element of this applyTransformToDestination
* is incompatible with the specified collection
* (optional)
* @throws NullPointerException if this applyTransformToDestination contains a null element and the
* specified collection does not permit null elements
* (optional),
* or if the specified collection is null
* @see #remove(Object)
* @see #contains(Object)
*/
@Override
public boolean removeAll(Collection> c) {
return backedSet.removeAll(c);
}
/**
* Removes all of the elements from this applyTransformToDestination (optional operation).
* The applyTransformToDestination will be empty after this call returns.
*
* @throws UnsupportedOperationException if the clear method
* is not supported by this applyTransformToDestination
*/
@Override
public void clear() {
backedSet.clear();
}
public boolean contains(K k, V v) {
return contains(new Pair<>(k, v));
}
public void add(K k, V v) {
add(new Pair<>(k, v));
}
}