java
在定義新類時,一個很是常見的疏忽是不爲 equals()
和 hashCode()
方法編寫適當的重寫方法。this
HashSet
和 HashMap
在許多操做中使用這些方法,若是它們沒有被正確覆蓋,那麼它們可能成爲潛在的內存泄漏問題的來源。spa
讓咱們以一個簡單的 Person
類爲例, 並將其用做 HashMap中
的鍵 :code
public class Person {
public String name;
public Person(String name)
{
this.name = name;
}
}
在這種狀況下,下面的斷言將會是true:對象
讓咱們看一下正確的實現了 equals()
和 hashCode()
的 Person
類:blog
可是,**若是咱們正確地重寫了 equals()
和 hashCode()
方法,那麼在這個 Map中
只會存在一個 Person
對象。內存
可是hash
這裏咱們使用Person做爲關鍵。因爲 Map
不容許重複鍵,所以咱們做爲鍵插入的衆多重複 Person
對象不該增長內存。class
請記住,Map不能包含重複的鍵:內存泄漏
如今咱們將重複的Person對象插入到使用此鍵的Map中。