A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© luqh 中级黑马   /  2015-3-16 20:35  /  945 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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方法?原因是什么?

1 个回复

倒序浏览
//必须写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的原因。
*/
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马