All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sleepycat.je.utilint.CollectionUtils Maven / Gradle / Ivy

The newest version!
/*-
 * Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
 *
 * This file was distributed by Oracle as part of a version of Oracle Berkeley
 * DB Java Edition made available at:
 *
 * http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
 *
 * Please see the LICENSE file included in the top-level directory of the
 * appropriate version of Oracle Berkeley DB Java Edition for a copy of the
 * license and additional information.
 */

package com.sleepycat.je.utilint;

import static java.util.Collections.emptySet;

import java.io.Serializable;
import java.util.AbstractMap;
import java.util.AbstractSet;
import java.util.Comparator;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;

/**
 * Java Collection utilities.
 */
public final class CollectionUtils {

    /** This class cannot be instantiated. */
    private CollectionUtils() {
        throw new AssertionError();
    }

    /**
     * An empty, unmodifiable, serializable, sorted set used for
     * emptySortedSet.
     */
    private static class EmptySortedSet extends AbstractSet
            implements SortedSet, Serializable {

        private static final long serialVersionUID = 1;

        @SuppressWarnings("rawtypes")
        static final SortedSet INSTANCE = new EmptySortedSet();

        @SuppressWarnings("rawtypes")
        private static Iterator ITER = new Iterator() {
            @Override
            public boolean hasNext() { return false; }
            @Override
            public Object next() { throw new NoSuchElementException(); }
            @Override
            public void remove() {
                throw new UnsupportedOperationException("remove");
            }
        };

        /* Implement SortedSet */

        @Override
        public Comparator comparator() { return null; }
        @Override
        public SortedSet subSet(E fromElement, E toElement) {
            return emptySortedSet();
        }
        @Override
        public SortedSet headSet(E toElement) { return emptySortedSet(); }
        @Override
        public SortedSet tailSet(E fromElement) { return emptySortedSet(); }
        @Override
        public E first() { throw new NoSuchElementException(); }
        @Override
        public E last() { throw new NoSuchElementException(); }

        /* Implement Set */

        @SuppressWarnings("unchecked")
        @Override
        public Iterator iterator() { return (Iterator) ITER; }
        @Override
        public int size() { return 0; }

        /** Use canonical instance. */
        private Object readResolve() { return INSTANCE; }
    }

    /**
     * An empty, unmodifiable, serializable, sorted map used for
     * emptySortedMap.
     */
    private static class EmptySortedMap extends AbstractMap
            implements SortedMap, Serializable {

        private static final long serialVersionUID = 1;

        @SuppressWarnings("rawtypes")
        static final SortedMap INSTANCE =
            new EmptySortedMap();

        /* Implement SortedMap */

        @Override
        public Comparator comparator() { return null; }
        @Override
        public SortedMap subMap(K fromKey, K toKey) {
            return emptySortedMap();
        }
        @Override
        public SortedMap headMap(K toKey) { return emptySortedMap(); }
        @Override
        public SortedMap tailMap(K fromKey) { return emptySortedMap(); }
        @Override
        public K firstKey() { throw new NoSuchElementException(); }
        @Override
        public K lastKey()  { throw new NoSuchElementException(); }

        /* Implement Map */

        @Override
        public Set> entrySet() { return emptySet(); }

        /** Use canonical instance. */
        private Object readResolve() { return INSTANCE; }
    }

    /**
     * Returns an empty, immutable, serializable sorted set.
     *
     * @param  the element type
     * @return the empty sorted set
     */
    /* TODO: Replace with Collections.emptySortedSet in Java 8 */
    @SuppressWarnings("unchecked")
    public static  SortedSet emptySortedSet() {
        return (SortedSet) EmptySortedSet.INSTANCE;
    }

    /**
     * Returns an empty, immutable, serializable sorted map.
     *
     * @param  the key type
     * @param  the value type
     * @return the empty sorted map
     */
    /* TODO: Replace with Collections.emptySortedMap in Java 8 */
    @SuppressWarnings("unchecked")
    public static  SortedMap emptySortedMap() {
        return (SortedMap) EmptySortedMap.INSTANCE;
    }
}