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中。