黑马程序员技术交流社区

标题: TreeMap搞不定、。。。 [打印本页]

作者: 刘辉    时间: 2013-3-21 22:01
标题: TreeMap搞不定、。。。
本帖最后由 樱木花道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 00:22
本帖最后由 谢洋 于 2013-3-22 00:23 编辑

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

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

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




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