Retrieval operations (including get) generally do not block, so may overlap with update operations (including put and remove). Retrievals reflect the results of the most recently completed update operations holding upon their onset. For aggregate operations such as putAll and clear, concurrent retrievals may reflect insertion or removal of only some entries. Similarly, Iterators and Enumerations return elements reflecting the state of the hash table at some point at or since the creation of the iterator/enumeration. They do not throw {@link ConcurrentModificationException}. However, iterators are designed to be used by only one thread at a time.
The allowed concurrency among update operations is guided by the optional concurrencyLevel constructor argument (default 16), which is used as a hint for internal sizing. The table is internally partitioned to try to permit the indicated number of concurrent updates without contention. Because placement in hash tables is essentially random, the actual concurrency will vary. Ideally, you should choose a value to accommodate as many threads as will ever concurrently modify the table. Using a significantly higher value than you need can waste space and time, and a significantly lower value can lead to thread contention. But overestimates and underestimates within an order of magnitude do not usually have much noticeable impact. A value of one is appropriate when it is known that only one thread will modify and all others will only read. Also, resizing this or any other kind of hash table is a relatively slow operation, so, when possible, it is a good idea to provide estimates of expected table sizes in constructors.
This implementation differs from HashMap in that it maintains a doubly-linked list running through all of its entries. This linked list defines the iteration ordering, which is the order in which keys were inserted into the map (insertion-order).NOTE: Access order is not supported by this map. Note that insertion order is not affected if a key is re-inserted into the map. (A key k is reinserted into a map m if m.put(k, v) is invoked when m.containsKey(k) would return true immediately prior to the invocation.)
An optional {@code maxCap} may be passed to the map constructor tocreate bounded map that will remove stale mappings automatically when new mappings are added to the map.
When iterating over the key set in insertion order one should note that iterator will see all removes done since the iterator was created, but will see no inserts to map.This class and its views and iterators implement all of the optional methods of the {@link Map} and {@link Iterator}interfaces.
Like {@link Hashtable} but unlike {@link HashMap}, this class does not allow null to be used as a key or value. @author Doug Lea @param < K> the type of keys maintained by this map @param < V> the type of mapped values
|
|
|
|
|
|
|
|