黑马程序员技术交流社区

标题: 看到这段代码还是有点收获的 [打印本页]

作者: luqh    时间: 2015-3-16 20:35
标题: 看到这段代码还是有点收获的
  1. package MAP;

  2. import java.util.HashSet;
  3. import java.util.Set;

  4. public class HashSetDemo {
  5. public static void main(String[] args) {
  6. Set<Node> foods = new HashSet<Node>();
  7. foods.add(new Node(3,4));
  8. foods.add(new Node(5,6));
  9. foods.add(new Node(6,7));
  10. foods.add(new Node(8,9));
  11. System.out.println(foods.size());
  12. System.out.println(foods);//必须有toStrig方法,才成输出自己想要的[3,4]结果

  13. //吃一颗豆子
  14. foods.remove(new Node(8,9));
  15. System.out.println(foods);//必须有toStrig方法,才成输出自己想要的[3,4]结果
  16. for(int i=0;i<10;i++){
  17.   for(int j=0;j<10;j++){
  18.    if(foods.contains(new Node(i,j))){
  19.     System.out.println("0");
  20.    }else
  21.     System.out.println("");
  22.   }
  23. }
  24.   }
  25. }


  26. class Node{
  27. private int i;
  28. private int j;
  29. public Node(int i,int j){
  30.       this.i=i;
  31.       this.j=j;
  32. }
复制代码
中间提到  必须要重写equals方法?原因是什么?

作者: luqh    时间: 2015-3-16 20:41
//必须写equals方法
/*原因:
集合中的contains其实也是用equals来比较的;
默认equals在比较两个对象时,是看他们是否指向同一个地址的,
但有时,我们希望两个对象只要是某些属性相同就认为他们的quals为true。比如:
Node n1 = new Node(3,4);
Node n2 = new Node(3,4);
如果不重写equals的话,他们是不相同的,所以我们要重写equals,判断只要他们的id和名字相同equals就为true
这也正是foods.contains(new Node(3,4)为true的原因。
*/




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2