习题一:在List内去除重复数字值,要求尽量简单
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Integer(1));
list.add(new Integer(2));
list.add(new Integer(2));
list.add(new Integer(4));
list.add(new Integer(4));
List list1 = duplicateList(list);
for (Object o : list1) {
System.out.println(o);
}
}
public static List duplicateList(List list) {
HashSet set = new HashSet();
set.addAll(list);
return new ArrayList(set);
}
习题二:判断输出值
public static void main(String[] args) {
HashSet set = new HashSet();
Person p1 = new Person(1001, "AA");
Person p2 = new Person(1002, "BB");
set.add(p1);
set.add(p2);
p1.name = "CC";
set.remove(p1);
System.out.println(set);
/**
* 输出为:[Person{id=1002, name='BB'}, Person{id=1001, name='CC'}]
* 原因:在set中是使用哈希值来存放数据删除数据的,
* 在最开始时,存放1001,AA的哈希值
* 与更改为CC后的哈希值不一致,所以删除时寻找的更改后的哈希值位置
* 而此时的位置上没有数据,所以没有删除
*/
set.add(new Person(1001, "CC"));
System.out.println(set);
/**
* 输出为:[Person{id=1002, name='BB'}, Person{id=1001, name='CC'}, Person{id=1001, name='CC'}]
* 原因:上一处的1001,CC存放的位置并不是其真实值的哈希值对应的位置
* 因此,真实值的哈希值对应的位置为空,可以添加
*/
set.add(new Person(1001, "AA"));
System.out.println(set);
/**
* 输出为:[Person{id=1002, name='BB'}, Person{id=1001, name='CC'}, Person{id=1001, name='CC'}, Person{id=1001, name='AA'}]
* 原因:此时,1001,AA的哈希值对应的位置上有数据1001,CC
* 然后进行equals()比较,两者不同,1001,AA数据加入
*/
}