黑马程序员技术交流社区
标题:
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