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

本帖最后由 孙百鑫 于 2013-3-28 23:16 编辑

/*
每一个学生都有对应的归属地.
学生Student,地址String
学生属性.姓名.年龄.
注意.:姓名和年龄相同的视为同一个学生.
保证学生的唯一性.
1. 描述学生.
2.定义map容器.将学生作为键,地址作为值,存入.
3.获取map集合中的元素.
*/
import java.util.*;
class Student implements Comparable<Student>//实现Comparable接口明确类型
{
private String name;
private int age;
Student(String name,int age)
{
  this.name=name;
  this.age=age;
}
public int compareTo(Student s)//明确比较类型 ,比较的是Student
{
  int num=new Integer(this.age).compareTo(new Integer(s.age));//比较年龄如果小于,排左边.大于排右边.
  if(num==0)//如果相等笔记姓名
   return this.name.compareTo(s.name);
  return num;//最后返回姓名
}
public int hashCode()//这句话也不理解?????????????????????????????????????????????????????????????????????????
{
  return name.hashCode()+age*34;//什么意思啊??????????????????????????????????????????????????????????????
}
public boolean equals(Object obj)//传进去的类型不匹配,所以用Object
{
  if(!(obj instanceof Student))//如果Obj和Student不相等的话抛出异常
   throw new ClassCastException("类型不匹配");
  Student s=(Student)obj;//把obj强制转换成Student学生
  return this.name.equals(s.name) && this.age==s.age;//这句话什么意思啊?????????????????????????????????????
}
public String getName()
{
  return name;
}
public int getAge()
{
  return age;
}
public String toString()
{
  return name+".."+age;
}
}

class MapTest
{
public static void main(String[] args)
{
  HashMap<Student,String> hm=new HashMap<Student,String>();
  hm.put(new Student("lisi1",21),"beijing");
  hm.put(new Student("lisi2",22),"shaghan");
  hm.put(new Student("lisi3",23),"nanjing");
  hm.put(new Student("lisi4",24),"wuhan");
  //第一种取出方式 keySet
  Set<Student> keySet=hm.keySet();
  Iterator<Student> it=keySet.iterator();
  while(it.hasNext())
  {
   Student stu=it.next();
   String addr=hm.get(stu);
   System.out.println(stu+".."+addr);
  }
}
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

17 个回复

倒序浏览
Comparable 可比较的   此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。
compareTo(T o)比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
实现 Comparable 接口中的 compareTo 方法,
通常大于时返回一个正数,小于时返回一个负数,
等于时返回零。
int num=new Integer(this.age).compareTo(new Integer(s.age));//比较this.age和S.age.要相等返回零赋给num,下面if判断
if(num==0)
                        return this.name.compareTo(s.name);
                return num;

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
于腾飛 发表于 2013-3-28 00:04
实现 Comparable 接口中的 compareTo 方法,
通常大于时返回一个正数,小于时返回一个负数,
等于时返回零 ...

返回负数.和返回正数是还有0是什么意思啊???
回复 使用道具 举报
张宝 发表于 2013-3-28 00:01
Comparable 可比较的   此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。
co ...

如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数是什么意思啊
回复 使用道具 举报
孙百鑫 发表于 2013-3-28 00:09
返回负数.和返回正数是还有0是什么意思啊???

返回负数时什么意思 ?你开玩笑呢是吧
回复 使用道具 举报
于腾飛 发表于 2013-3-28 00:25
返回负数时什么意思 ?你开玩笑呢是吧

我知道正数为真.负数为假.可是有什么作用啊?
回复 使用道具 举报
张宝 中级黑马 2013-3-28 00:30:00
8#
如果该对象小于指定对象,返回负整数,那么该对象就排在指定对象的左边
如果该对象大于指定对象,返回负整数,那么该对象就排在指定对象的右变
回复 使用道具 举报
孙百鑫 发表于 2013-3-28 00:28
我知道正数为真.负数为假.可是有什么作用啊?

if(num==0)
                        return this.name.compareTo(s.name);//这个
                return num;
这不是紧接着的IF判断语句嘛,要是num==0 就return嘛
回复 使用道具 举报
孙百鑫 发表于 2013-3-28 00:28
我知道正数为真.负数为假.可是有什么作用啊?

注意.:姓名和年龄相同的视为同一个学生.
保证学生的唯一性.
public int hashCode()
        {
                return name.hashCode()+age*34;//姓名和年龄相同的话,hashcode()返回值相同
        }
     public int compareTo(Student s)//保证学生对象的唯一性
        {
                int num=new Integer(this.age).compareTo(new Integer(s.age));

                if(num==0)//年龄相同,再比较姓名
                        return this.name.compareTo(s.name);//姓名也相同,则表示为同一学生对象
                return num;
        }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
于腾飛 发表于 2013-3-28 00:35
if(num==0)
                        return this.name.compareTo(s.name);//这个
                retu ...

别的都理解了.就差这三个了.....回来再看一下吧.....我修改了
回复 使用道具 举报
杨政 发表于 2013-3-28 00:37
注意.:姓名和年龄相同的视为同一个学生.
保证学生的唯一性.
public int hashCode()

别的都理解了.就差这三个了.....回来再看一下吧.....我修改了
回复 使用道具 举报
杨政 发表于 2013-3-28 00:37
注意.:姓名和年龄相同的视为同一个学生.
保证学生的唯一性.
public int hashCode()

别的都理解了.就差这三个了.....回来再看一下吧.....我修改了
回复 使用道具 举报
张宝 发表于 2013-3-28 00:30
如果该对象小于指定对象,返回负整数,那么该对象就排在指定对象的左边
如果该对象大于指定对象,返回负整 ...

别的都理解了.就差这三个了.....回来再看一下吧.....我修改了
回复 使用道具 举报
姜伟 发表于 2013-3-28 01:35
你代码中的问号都被我以注释的形式写出来了,你可以参考一下。多看看毕老师讲的视频,自己多体会体会,多看 ...

万分感谢.超级大神!!!!!要的就是这种超级详细的答案..太爱你了.困扰了我一晚上了..终于理解通了.!!!!太不容易了.加我扣扣被.以后有问题帮帮我.283122529谢谢啦
回复 使用道具 举报
姜伟 发表于 2013-3-28 01:53
我也是零基础才学完的,前几天面试的,发挥的不太好,不知道能不能被录取。 ...

好流弊啊你.......肯定能面试上啊. ....你学了 多久了呀..这么狠
回复 使用道具 举报
姜伟 发表于 2013-3-28 02:19
我学了多久我都不好意思说,自制力太差了。我刚开始以为他们只是走走形式,所以没怎么在乎,自荐信只得了 ...

还是真的很谢谢你...你扣扣多少呀...我加你
回复 使用道具 举报
王浩威 来自手机 中级黑马 2013-3-28 10:34:05
18#
好问题。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马