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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王桂丽 中级黑马   /  2012-8-29 11:55  /  1244 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
往hashSet集合中存入自定义对象。
姓名和年龄相同为同一个人,重复元素。
*/
import java.util.*;
class  Student
{
private String name;//定义私有姓名,年龄,成绩三个属性
private int age;
private double score;
  Student(String name,int age,double score)//通过构造函数进行初始化
{
  this.name=name;
  this.age=age;
  this.score=score;
}
public  void setName(String name)//分别提供set和get方法
{
  this.name=name;
}
public  String getName()
{
  return name;
}
public  void setAge(int age)
{
  this.age=age;
}
public  int getAge()
{
  return age;
}
public void setScore(double score)
{
  this.score=score;
}
public  double getScore()
{
  return score;
}
/*
public boolean equals(Object obj)
{
  if(!(obj instanceof Student))
   return false;
  Student p=(Student)obj;
  return this.name.equals(p.name)&&this.age==p.age&&this.score==p.score;
}
*/

}
class SortScore
{
public static void main(String[] args)
{
  HashSet s=new HashSet();
  s.add(new Student("张三",36,97.5));
  s.add(new Student("李四",35,96.5));
  s.add(new Student("赵六",34,97.0));
  s.add(new Student("王五",32,97.0));
  s.add(new Student("齐九",39,97.4));
Iterator it=s.iterator();
while(it.hasNext())
{
    Student p=(Student)it.next();
    System.out.println(p.getName()+"::"+p.getAge()+p.getScore());
}

  

  }
}
}

疑问:比较的是哈希值,集合里传的都是new出来的新对象,为什么会不具备比较性呢?

未命名.jpg (21.5 KB, 下载次数: 3)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

2 个回复

倒序浏览
s.add(new Student("张三",36,97.5));
s.add(new Student("张三",36,97.5));  //每次new Student对象都会产生一个新的hashCode值,
                                                                 //楼主没有重写hashCode方法,那么这个new Student("张三",36,97.5)对象也会添加到s集合中,
                                                                 //造成重复添加,不符合Set集合无重复元 素的特点
  s.add(new Student("李四",35,96.5));
  s.add(new Student("赵六",34,97.0));
  s.add(new Student("王五",32,97.0));
  s.add(new Student("齐九",39,97.4));
回复 使用道具 举报
此问题已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马