1,ArrayList有序 可重复,HashSet,无序,不可重复,先判断有没有相等的对象,再放入.
2,如果两个对象的equals对象相等,就要让它们的hashcode值相等
/*只有类的实例对象要被采用哈希算法进行存储和检索的时候,这个类才需要按照要求覆盖hashCode
方法.虽然程序可能暂时不会用到当前类的hashCode方法,但是为它
提供一个hashCode方法也不会有什么不好,可能以后就能用到这个方法了,
所以,通常要求hashCode方法的和equals方法一并被同时覆盖.*/
3,内存泄漏问题:
练习实例:
package cn.itcast.day1;
import java.io.*;
import java.util.*;
public class ReflextTest2 {
public static void main(String[] args) throws Exception {
Collection collections = new HashSet();
ReflectPoint pt1 = new ReflectPoint(3,3);
ReflectPoint pt2 = new ReflectPoint(5,5);
ReflectPoint pt3 = new ReflectPoint(3,3);
collections.add(pt1);
collections.add(pt2);
collections.add(pt3);
collections.add(pt1);
pt1.y = 7; //引起内存泄漏的地方
collections.remove(pt1);
System.out.println(collections.size());
}
}
//
package cn.itcast.day1;
public class ReflectPoint {
private int x ;
public int y ;
public String str1 = "ball";
public String str2 = "basketball";
public String str3 = "itcast";
public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ReflectPoint other = (ReflectPoint) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}
public String toString(){
return str1 + ":" + str2 + ":" + str3;
}
}