HashCode()方法的作用
哈希算法提高从集合中查找元素的效率,这种方式将集合分成若干个存储区域,每个对象可以计算出一个哈希码,可以将哈希码分组,每组分别对应某个存储区域,根据一个对象的哈希码就可以确定该对象应该存储在哪个区域。
HashSet类是采用哈希算法存取对象的集合。它内部采用对某个数字取余的方式对哈希码进行分组和划分对象的存储空间。当从HashSet集合中查找某个对象时,首先调用对象的HashCode()方法获取该对象的哈希码,再根据哈希码找到相应的存储区域,最后取出该存储区域内的每个元素与该对象进行equals方法比较。
存储对象在hashset(哈希集合)中时,HashCode值才有意义。
Collection collection = new HashSet();
ReflectPoint pt1 = new ReflectPoint(3,3);
ReflectPoint pt2 = new ReflectPoint(5,5);
ReflectPoint pt3 = new ReflectPoint(3,3);
collection.add(pt1);
collection.add(pt2);
collection.add(pt3);
collection.add(pt1);
pt1.y = 7;
//修改了y的值时,同时修改了hashCode值,则删除原先的y=3的pt1时,就无法删除,因为两者的哈希码值不同。(实际没有删除pt1,这会造成内存泄露)
collection.remove(pt1);
System.out.println(collection.size());