java.util
Class HashMap
java.lang.Object
java.util.AbstractMap
java.util.HashMap
- All Implemented Interfaces:
- Cloneable, Map, Serializable
- Direct Known Subclasses:
- CAugmentationMap.ContextMap, CGFCollectionMap.SetMap
- public class HashMap
- extends AbstractMap
- implements Map, Cloneable, Serializable
JML's specification of java.util.HashMap.
- Author:
- Katie Becker, Gary T. Leavens
Class Specifications |
public invariant this.initialCapacity >= 0;
public invariant this.loadFactor > 0.0; |
Specifications inherited from class Object |
represents objectState <- org.jmlspecs.lang.JMLDataGroup.IT;
public represents _getClass <- \typeof(this); |
Specifications inherited from interface Map |
axiom ( \forall java.util.Map m; ; ( \forall java.lang.Object k, v, vv; ; (m.contains(k,v)&&m.contains(k,vv)) ==> nullequals(v,vv)));
instance public invariant ( \forall java.lang.Object o; this.theMap.has(o); o instanceof java.util.Map.Entry);
instance public invariant ( \forall java.lang.Object o1, o2; this.theMap.has(o1)&&this.theMap.has(o2); o2 != o1 ==> !org.jmlspecs.models.JMLNullSafe.equals(o2,o1)); |
Nested Class Summary |
(package private) static class |
HashMap.Entry
|
Model fields inherited from interface java.util.Map |
theMap |
initialCapacity
public int initialCapacity
DEFAULT_INITIAL_CAPACITY
static final int DEFAULT_INITIAL_CAPACITY
MAXIMUM_CAPACITY
static final int MAXIMUM_CAPACITY
DEFAULT_LOAD_FACTOR
static final float DEFAULT_LOAD_FACTOR
table
transient HashMap.Entry[] table
size
transient int size
threshold
int threshold
loadFactor
final float loadFactor
- Specifications: spec_public
modCount
transient volatile int modCount
NULL_KEY
static final Object NULL_KEY
HashMap
public HashMap(int initialCapacity,
float loadFactor)
- Specifications:
-
public normal_behavior
requires initialCapacity >= 0;
assignable theMap, this.initialCapacity, this.loadFactor;
ensures this.theMap != null&&this.theMap.isEmpty();
ensures this.initialCapacity == initialCapacity&&this.loadFactor == loadFactor;
HashMap
public HashMap(int initialCapacity)
- Specifications:
-
public normal_behavior
assignable theMap, this.initialCapacity, this.loadFactor;
ensures this.theMap != null&&this.theMap.isEmpty();
ensures this.initialCapacity == initialCapacity&&this.loadFactor == 0.75;
HashMap
public HashMap()
- Specifications:
-
public normal_behavior
assignable theMap, initialCapacity, loadFactor;
ensures this.theMap != null&&this.theMap.isEmpty();
ensures this.loadFactor == 0.75;
ensures this.initialCapacity == 16;
HashMap
public HashMap(Map m)
- Specifications:
-
public normal_behavior
requires m != null;
assignable theMap, initialCapacity, loadFactor;
ensures this.loadFactor == 0.75&&this.theMap.equals(m.theMap);
init
void init()
maskNull
static Object maskNull(Object key)
unmaskNull
static Object unmaskNull(Object key)
hash
static int hash(Object x)
eq
static boolean eq(Object x,
Object y)
indexFor
static int indexFor(int h,
int length)
size
public int size()
- Specified by:
size
in interface Map
- Overrides:
size
in class AbstractMap
- Specifications: (inherited)pure
- Specifications inherited from overridden method in class AbstractMap:
--- None ---
- Specifications inherited from overridden method in interface Map:
pure -
public normal_behavior
ensures \result == this.theMap.int_size();
- implies_that
-
ensures \result >= 0;
isEmpty
public boolean isEmpty()
- Specified by:
isEmpty
in interface Map
- Overrides:
isEmpty
in class AbstractMap
- Specifications: (inherited)pure
- Specifications inherited from overridden method in class AbstractMap:
--- None ---
- Specifications inherited from overridden method in interface Map:
pure -
public normal_behavior
ensures \result <==> this.theMap.isEmpty();
- implies_that
-
public normal_behavior
ensures \result <==> (this.size() == 0);
get
public Object get(nullable Object key)
- Specified by:
get
in interface Map
- Overrides:
get
in class AbstractMap
- Specifications: (inherited)pure
- Specifications inherited from overridden method in class AbstractMap:
--- None ---
- Specifications inherited from overridden method get(Object key) in interface Map:
pure nullable -
public normal_behavior
requires !this.containsKey(key);
ensures \result == null;
- also
-
public normal_behavior
requires this.containsKey(key);
ensures ( \exists java.util.Map.Entry e; this.theMap.has(e); e != null&&org.jmlspecs.models.JMLNullSafe.equals(e.abstractKey,key)&&\result .equals(e.abstractValue));
containsKey
public boolean containsKey(nullable Object key)
- Specified by:
containsKey
in interface Map
- Overrides:
containsKey
in class AbstractMap
- Specifications: (inherited)pure
- Specifications inherited from overridden method in class AbstractMap:
--- None ---
- Specifications inherited from overridden method containsKey(Object key) in interface Map:
pure -
public normal_behavior
ensures \result <==> ( \exists java.util.Map.Entry e; this.theMap.has(e)&&e != null; org.jmlspecs.models.JMLNullSafe.equals(e.abstractKey,key));
getEntry
HashMap.Entry getEntry(Object key)
put
public Object put(nullable Object key,
nullable Object value)
- Specified by:
put
in interface Map
- Overrides:
put
in class AbstractMap
- Specifications inherited from overridden method in class AbstractMap:
--- None ---
- Specifications inherited from overridden method put(Object key, Object value) in interface Map:
-
public behavior
assignable objectState;
ensures ( \exists java.util.Map.Entry e; this.theMap.has(e); e != null&&org.jmlspecs.models.JMLNullSafe.equals(e.abstractKey,key)&&org.jmlspecs.models.JMLNullSafe.equals(e.abstractValue,value));
- also
-
public behavior
assignable objectState;
ensures ( \exists java.util.Map.Entry e; this.contains(e); nullequals(e.abstractKey,key)&&nullequals(e.abstractValue,value));
ensures ( \forall java.util.Map.Entry e; ; \old(this.contains(e)) ==> this.contains(e));
ensures ( \forall java.util.Map.Entry e; ; this.contains(e) ==> (\old(this.contains(e))||(e.getKey() == key&&e.getValue() == value)));
ensures \result == \old(this.get(key));
signals_only java.lang.RuntimeException;
signals (java.lang.NullPointerException) \not_modified(value)&&(key == null)||(value == null)&&!this.containsNull;
signals (java.lang.UnsupportedOperationException) \not_modified(theMap)&&(* if the map's put operation is not supported *);
signals (java.lang.ClassCastException) \not_modified(theMap)&&(* \typeof(key) or \typeof(value) is incompatible with the valueType or keyType of this map *);
signals (java.lang.IllegalArgumentException) \not_modified(theMap)&&(* if some aspect of key or value is not allowed in the map *);
putAllForCreate
void putAllForCreate(Map m)
resize
void resize(int newCapacity)
transfer
void transfer(HashMap.Entry[] newTable)
putAll
public void putAll(Map t)
- Specified by:
putAll
in interface Map
- Overrides:
putAll
in class AbstractMap
- Specifications inherited from overridden method putAll(Map t) in class AbstractMap:
- also
-
requires t != null;
- Specifications inherited from overridden method putAll(Map t) in interface Map:
-
public behavior
assignable theMap;
ensures ( \forall java.util.Map.Entry e; t.theMap.has(e); this.theMap.has(e));
signals_only java.lang.RuntimeException;
signals (java.lang.NullPointerException) \not_modified(theMap)&&(t == null)&&!this.containsNull;
signals (java.lang.UnsupportedOperationException) \not_modified(theMap)&&(* if the map's put operation is not supported *);
signals (java.lang.ClassCastException) \not_modified(theMap)&&(* \typeof(t) or is incompatible with this map *);
signals (java.lang.IllegalArgumentException) \not_modified(theMap)&&(* if some aspect of a key or value is not allowed in the map *);
- also
-
public behavior
assignable objectState;
ensures ( \forall java.util.Map.Entry e; ; \old(this.contains(e)) ==> this.contains(e));
ensures ( \forall java.util.Map.Entry e; ; \old(t.contains(e)) ==> this.contains(e));
ensures ( \forall java.util.Map.Entry e; ; this.contains(e) ==> (\old(this.contains(e))||\old(t.contains(e))));
signals_only java.lang.RuntimeException;
remove
public Object remove(nullable Object key)
- Specified by:
remove
in interface Map
- Overrides:
remove
in class AbstractMap
- Specifications inherited from overridden method in class AbstractMap:
--- None ---
- Specifications inherited from overridden method remove(Object key) in interface Map:
-
public behavior
assignable theMap;
ensures \result != null ==> ( \exists java.util.Map.Entry e; e != null&&\old(this.theMap.has(e)); org.jmlspecs.models.JMLNullSafe.equals(e.abstractKey,key)&&\result .equals(e.abstractValue));
ensures !( \exists java.util.Map.Entry e; e != null&&\old(this.theMap.has(e)); org.jmlspecs.models.JMLNullSafe.equals(e.abstractKey,key));
signals_only java.lang.RuntimeException;
- also
-
public behavior
assignable objectState;
ensures ( \forall java.util.Map.Entry e; ; this.contains(e) ==> \old(this.contains(e)));
ensures ( \forall java.util.Map.Entry e; \old(this.contains(e)); (this.contains(e)||nullequals(key,e.getKey())));
ensures \old(this.containsKey(key)) ==> nullequals(\result ,\old(this.get(key)));
ensures !\old(this.containsKey(key)) ==> \result == null;
signals_only java.lang.RuntimeException;
signals (java.lang.UnsupportedOperationException) (* if this operation is not supported *);
signals (java.lang.ClassCastException) (* if the argument is not appropriate *);
signals (java.lang.NullPointerException) key == null&&(* if this map doesn't support null keys *);
- implies_that
-
assignable objectState;
ensures !this.containsKey(key);
ensures ( \forall java.util.Map.Entry e; ; this.theMap.has(e) ==> \old(this.theMap.has(e)));
ensures ( \forall java.util.Map.Entry e; \old(this.theMap.has(e)); (this.theMap.has(e)||org.jmlspecs.models.JMLNullSafe.equals(e.abstractKey,key)));
removeEntryForKey
HashMap.Entry removeEntryForKey(Object key)
removeMapping
HashMap.Entry removeMapping(Object o)
clear
public void clear()
- Specified by:
clear
in interface Map
- Overrides:
clear
in class AbstractMap
- Specifications inherited from overridden method in class AbstractMap:
--- None ---
- Specifications inherited from overridden method in interface Map:
-
public behavior
assignable theMap;
ensures this.theMap.isEmpty();
signals_only java.lang.RuntimeException;
- implies_that
-
public behavior
assignable objectState;
ensures this.isEmpty();
signals_only java.lang.RuntimeException;
containsValue
public boolean containsValue(nullable Object value)
- Specified by:
containsValue
in interface Map
- Overrides:
containsValue
in class AbstractMap
- Specifications: (inherited)pure
- Specifications inherited from overridden method in class AbstractMap:
--- None ---
- Specifications inherited from overridden method containsValue(Object value) in interface Map:
pure -
public behavior
ensures \result <==> ( \exists java.util.Map.Entry e; this.theMap.has(e)&&e != null; org.jmlspecs.models.JMLNullSafe.equals(e.abstractValue,value));
signals_only java.lang.ClassCastException, java.lang.NullPointerException;
signals (java.lang.ClassCastException) (* if the value is not appropriate for this object *);
signals (java.lang.NullPointerException) value == null&&(* this type doesn't permit null values *);
clone
public Object clone()
- Overrides:
clone
in class AbstractMap
- Specifications:
- also
-
public normal_behavior
assignable \nothing;
ensures \result instanceof java.util.Map&&\fresh(\result )&&((java.util.Map)\result ).equals(this);
ensures_redundantly \result != this;
- Specifications inherited from overridden method in class AbstractMap:
--- None ---
- Specifications inherited from overridden method in class Object:
non_null -
protected normal_behavior
requires this instanceof java.lang.Cloneable;
assignable \nothing;
ensures \result != null;
ensures \typeof(\result ) == \typeof(this);
ensures (* \result is a clone of this *);
- also
-
protected normal_behavior
requires this.getClass().isArray();
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((java.lang.Object[])\result ).length == ((java.lang.Object[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((java.lang.Object[])this).length; ((java.lang.Object[])\result )[i] == ((java.lang.Object[])this)[i]);
- also
-
requires this.getClass().isArray();
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures java.lang.reflect.Array.getLength(\result ) == java.lang.reflect.Array.getLength(this);
ensures ( \forall int i; 0 <= i&&i < java.lang.reflect.Array.getLength(this); ( \exists java.lang.Object result_i; result_i == java.lang.reflect.Array.get(\result ,i); (result_i == null&&java.lang.reflect.Array.get(this,i) == null)||(result_i != null&&result_i.equals(java.lang.reflect.Array.get(this,i)))));
- also
-
protected exceptional_behavior
requires !(this instanceof java.lang.Cloneable);
assignable \nothing;
signals_only java.lang.CloneNotSupportedException;
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) <: \type(java.lang.Object);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((java.lang.Object[])\result ).length == ((java.lang.Object[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((java.lang.Object[])this).length; ((java.lang.Object[])\result )[i] == ((java.lang.Object[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(int);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((int[])\result ).length == ((int[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((int[])this).length; ((int[])\result )[i] == ((int[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(byte);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((byte[])\result ).length == ((byte[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((byte[])this).length; ((byte[])\result )[i] == ((byte[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(char);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((char[])\result ).length == ((char[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((char[])this).length; ((char[])\result )[i] == ((char[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(long);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((long[])\result ).length == ((long[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((long[])this).length; ((long[])\result )[i] == ((long[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(short);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((short[])\result ).length == ((short[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((short[])this).length; ((short[])\result )[i] == ((short[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(boolean);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((boolean[])\result ).length == ((boolean[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((boolean[])this).length; ((boolean[])\result )[i] == ((boolean[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(float);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((float[])\result ).length == ((float[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((float[])this).length; (java.lang.Float.isNaN(((float[])\result )[i])&&java.lang.Float.isNaN(((float[])this)[i]))||((float[])\result )[i] == ((float[])this)[i]);
- also
-
protected normal_behavior
requires \elemtype(\typeof(this)) == \type(double);
assignable \nothing;
ensures \elemtype(\typeof(\result )) == \elemtype(\typeof(this));
ensures ((double[])\result ).length == ((double[])this).length;
ensures ( \forall int i; 0 <= i&&i < ((double[])this).length; (java.lang.Double.isNaN(((double[])\result )[i])&&java.lang.Double.isNaN(((double[])this)[i]))||((double[])\result )[i] == ((double[])this)[i]);
addEntry
void addEntry(int hash,
Object key,
Object value,
int bucketIndex)
createEntry
void createEntry(int hash,
Object key,
Object value,
int bucketIndex)
newKeyIterator
Iterator newKeyIterator()
newValueIterator
Iterator newValueIterator()
newEntryIterator
Iterator newEntryIterator()
keySet
public Set keySet()
- Specified by:
keySet
in interface Map
- Overrides:
keySet
in class AbstractMap
- Specifications: (inherited)pure
- Specifications inherited from overridden method in class AbstractMap:
--- None ---
- Specifications inherited from overridden method in interface Map:
pure -
public normal_behavior
ensures_redundantly \result != null;
ensures ( \forall java.lang.Object o; ; this.containsKey(o) <==> \result .contains(o));
values
public Collection values()
- Specified by:
values
in interface Map
- Overrides:
values
in class AbstractMap
- Specifications: (inherited)pure
- Specifications inherited from overridden method in class AbstractMap:
--- None ---
- Specifications inherited from overridden method in interface Map:
pure -
public normal_behavior
ensures \result != null;
ensures ( \forall java.lang.Object o; ; \result .contains(o) <==> this.containsValue(o));
entrySet
public Set entrySet()
- Specified by:
entrySet
in interface Map
- Specifications: (inherited)pure
- Specifications inherited from overridden method in class AbstractMap:
--- None ---
- Specifications inherited from overridden method in interface Map:
pure -
public normal_behavior
ensures \result != null;
ensures \result .theSet.equals(this.theMap);
capacity
int capacity()
loadFactor
float loadFactor()
JML is Copyright (C) 1998-2002 by Iowa State University and is distributed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This release depends on code from the MultiJava project and is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.