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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘辉 中级黑马   /  2013-3-21 22:01  /  1244 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 樱木花道10 于 2013-3-23 20:40 编辑

import java.util.Collection;
import java.util.TreeMap;

/*
*需求:元素的唯一性,如果同年龄同姓名是为同一人
*                键是String,值是Student
*/
public class HashMapDemo {
        public static void main(String[] args) {
                // 创建集合对象
                TreeMap<String, Student> hs = new TreeMap<String, Student>();
                // 创建元素对象
                Student s1 = new Student("张嘉译", 50);
                Student s2 = new Student("刘嘉玲", 45);
                Student s3 = new Student("乐嘉", 40);
                Student s4 = new Student("刘嘉玲", 45);
                // 添加元素
                hs.put( "yl001",s1);
                hs.put( "yl002",s2);
                hs.put( "yl003",s3);
                hs.put( "yl004",s4);
                // 遍历
                Collection<Student> c = hs.values();
                for (Student value : c) {
                        //我想在这里写通过值来得到键的代码,但我不知道怎么写
                        //就是这里什么都不写,也得不出我要判断元素唯一性的结果
                        //求大神解惑...
                        System.out.println(value.getName() + "***" + value.getAge());
                }
        }
}
public class Student {
        private String name;
        private int age;
        public Student() {
        }
        public Student(String name, int age) {
                this.name = name;
                this.age = age;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + age;
                result = prime * result + ((name == null) ? 0 : name.hashCode());
                return result;
        }
        @Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (getClass() != obj.getClass())
                        return false;
                Student other = (Student) obj;
                if (age != other.age)
                        return false;
                if (name == null) {
                        if (other.name != null)
                                return false;
                } else if (!name.equals(other.name))
                        return false;
                return true;
        }
}

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-22 12:40

评分

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

查看全部评分

2 个回复

倒序浏览
本帖最后由 谢洋 于 2013-3-22 00:23 编辑

for (Student value : c) {
                        //我想在这里写通过值来得到键的代码,但我不知道怎么写//我查看API没有发现有通个所有值来找出所有键的方法,即使有这么一个方法意也不大,因为TreeMap已提供                   keySet这个方法,我想也是因为这个原因才不提供别的方法了吧
                        //就是这里什么都不写,也得不出我要判断元素唯一性的结果//这个你可以通获取TreeMap的size得到验证
                        //求大神解惑...
                        System.out.println(value.getName() + "***" + value.getAge());
                }
        }
}
public class Student {

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
//我想在这里写通过值来得到键的代码,但我不知道怎么写  //好像API中没有通过值来查找键的方法,Map集合是通过键的唯一性来存储相应的值
你的需求是:元素的唯一性,如果同年龄同姓名是为同一人
              键是String,值是Student
用Map集合好像不能实现这个功能不太好吧。Map是通过键来控制唯一性的,你应该使用Set集合,因为Set集合中的元素是不可以重复的,
-----TreeSet集合存储自定义对象(Student)必须实现Comparable接口, 或者传递实现Comparator接口对象给TreeSet的构造方法,
-----HashSet集合中存储自定义对象必须覆盖hashCode()和equals()方法..

个人了解,有偏差请谅解.

评分

参与人数 1技术分 +2 收起 理由
滔哥 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马