1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
/*
* Copyright (C) 2002-2014 Sebastiano Vigna
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.
*/
package PACKAGE;
import VALUE_PACKAGE.VALUE_COLLECTION;
import it.unimi.dsi.fastutil.objects.ObjectSet;
import it.unimi.dsi.fastutil.objects.ObjectIterator;
import java.util.Map;
/** A type-specific {@link Map}; provides some additional methods that use polymorphism to avoid (un)boxing, and handling of a default return value.
*
* <P>Besides extending the corresponding type-specific {@linkplain it.unimi.dsi.fastutil.Function function}, this interface strengthens {@link #entrySet()},
* {@link #keySet()} and {@link #values()}. Maps returning entry sets of type {@link FastEntrySet} support also fast iteration.
*
* <P>A submap or subset may or may not have an
* independent default return value (which however must be initialized to the
* default return value of the originator).
*
* @see Map
*/
public interface MAP KEY_VALUE_GENERIC extends FUNCTION KEY_VALUE_GENERIC, Map<KEY_GENERIC_CLASS,VALUE_GENERIC_CLASS> {
/** An entry set providing fast iteration.
*
* <p>In some cases (e.g., hash-based classes) iteration over an entry set requires the creation
* of a large number of {@link java.util.Map.Entry} objects. Some <code>fastutil</code>
* maps might return {@linkplain #entrySet() entry set} objects of type <code>FastEntrySet</code>: in this case, {@link #fastIterator() fastIterator()}
* will return an iterator that is guaranteed not to create a large number of objects, <em>possibly
* by returning always the same entry</em> (of course, mutated).
*/
public interface FastEntrySet KEY_VALUE_GENERIC extends ObjectSet<MAP.Entry KEY_VALUE_GENERIC> {
/** Returns a fast iterator over this entry set; the iterator might return always the same entry object, suitably mutated.
*
* @return a fast iterator over this entry set; the iterator might return always the same {@link java.util.Map.Entry} object, suitably mutated.
*/
public ObjectIterator<MAP.Entry KEY_VALUE_GENERIC> fastIterator();
}
/** Returns a set view of the mappings contained in this map.
* <P>Note that this specification strengthens the one given in {@link Map#entrySet()}.
*
* @return a set view of the mappings contained in this map.
* @see Map#entrySet()
*/
ObjectSet<Map.Entry<KEY_GENERIC_CLASS, VALUE_GENERIC_CLASS>> entrySet();
/** Returns a type-specific set view of the mappings contained in this map.
*
* <p>This method is necessary because there is no inheritance along
* type parameters: it is thus impossible to strengthen {@link #entrySet()}
* so that it returns an {@link it.unimi.dsi.fastutil.objects.ObjectSet}
* of objects of type {@link java.util.Map.Entry} (the latter makes it possible to
* access keys and values with type-specific methods).
*
* @return a type-specific set view of the mappings contained in this map.
* @see #entrySet()
*/
ObjectSet<MAP.Entry KEY_VALUE_GENERIC> ENTRYSET();
/** Returns a set view of the keys contained in this map.
* <P>Note that this specification strengthens the one given in {@link Map#keySet()}.
*
* @return a set view of the keys contained in this map.
* @see Map#keySet()
*/
SET KEY_GENERIC keySet();
/** Returns a set view of the values contained in this map.
* <P>Note that this specification strengthens the one given in {@link Map#values()}.
*
* @return a set view of the values contained in this map.
* @see Map#values()
*/
VALUE_COLLECTION VALUE_GENERIC values();
#if #values(primitive)
/**
* @see Map#containsValue(Object)
*/
boolean containsValue( VALUE_TYPE value );
#endif
/** A type-specific {@link java.util.Map.Entry}; provides some additional methods
* that use polymorphism to avoid (un)boxing.
*
* @see java.util.Map.Entry
*/
interface Entry KEY_VALUE_GENERIC extends Map.Entry <KEY_GENERIC_CLASS,VALUE_GENERIC_CLASS> {
#if #keys(primitive)
/**
* @see java.util.Map.Entry#getKey()
*/
KEY_TYPE ENTRY_GET_KEY();
#endif
#if #values(primitive)
/**
* @see java.util.Map.Entry#setValue(Object)
*/
VALUE_TYPE setValue(VALUE_TYPE value);
/**
* @see java.util.Map.Entry#getValue()
*/
VALUE_TYPE ENTRY_GET_VALUE();
#endif
}
}
|