,
?>
e
=
(
Entry
,
?>
)
o
;
return
Objects
.
equal
(
e
.
getKey
(),
key
)
&&
Objects
.
equal
(
e
.
getValue
(),
value
);
}
@Override
public
final
int
hashCode
()
{
return
(
key
==
null
?
0
:
key
.
hashCode
())
^
(
value
==
null
?
0
:
value
.
hashCode
());
}
@Override
public
final
String
toString
()
{
return
key
+
"="
+
value
;
}
}
我们看到他有4个变量,其中的key和value就是我们常见的两个,而另外的两个是存储HashMapEntry的时候用的,其中他还有几个的方法,因为我们知道HashMap是一个数组加链表的形式存储的,hashCode是用来判断存储在哪个数组里面的,equals判断是否是同一个对象,HashMap存储的其实就是HashMapEntry。
我们再看HashMap的另外一个构造方法
private
static
final
int
MINIMUM_CAPACITY
=
4
;
/**
* Max capacity for a HashMap. Must be a power of two >= MINIMUM_CAPACITY.
*/
private
static
final
int
MAXIMUM_CAPACITY
=
1
30
;
………………………
public
HashMap
(
int
capacity
)
{
if
(
capacity
0
)
{
throw
new
IllegalArgumentException
(
"Capacity: "
+
capacity
);
}
if
(
capacity
==
0
)
{
@SuppressWarnings
(
"unchecked"
)
HashMapEntry
K
,
V
>
[]
tab
=
(
HashMapEntry
K
,
V
>
[])
EMPTY_TABLE
;
table
=
tab
;
threshold
= -
1
;
// Forces first put() to replace EMPTY_TABLE
return
;
}
if
(
capacity
MINIMUM_CAPACITY
)
{
capacity
=
MINIMUM_CAPACITY
;
}
else
if
(
capacity
>
MAXIMUM_CAPACITY
)
{
capacity
=
MAXIMUM_CAPACITY
;
}
else
{
capacity
=
Collections
.
roundUpToPowerOfTwo
(
capacity
);
}
makeTable
(
capacity
);