黑马程序员技术交流社区
标题:
关于 集合框架的一些小疑问,高手进
[打印本页]
作者:
Miss小强
时间:
2013-4-19 09:43
标题:
关于 集合框架的一些小疑问,高手进
本帖最后由 Miss小强 于 2013-4-19 17:20 编辑
关于TreeSet如何保证元素的唯一性。。。
作者:
Miss小强
时间:
2013-4-19 09:46
他保证元素唯一性的方式是compareTo返回0表示相同,返回大于零的数表示大于,返回小于零的数表示小于;
其底层原理是二叉树,左边的是小的,右边的是
大的,他是这样保证元素的有序性,那么他是怎么保证元素的唯一性呢??
因为我在equals方法和hashCode方法上加了打印语句,同时在存的时候故意放相同的元素,只有compareTo方法调用了
我的想法:直接使用的是compareTo方法,如果compareTo方法返回值为0,则不存入;从而保证了其唯一性
那么是不是说hashCode方法和equals方法没多大作用呢。。。
作者:
Miss小强
时间:
2013-4-19 09:50
public class Students implements Comparable<Students> {
private String name;
private int age;
public Students() {
super();
}
public Students(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public int compareTo(Students o) {
System.out.println("compareTo");
return this.name.compareTo(o.getName());
}
@Override
public int hashCode() {
System.out.println("zhixing");
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) {
System.out.println("zhixing");
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Students other = (Students) 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;
}
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;
}
public static void main(String[] args) {
Set<Students> treeSet = new TreeSet<Students>();
treeSet.add(new Students("xiaoqiang", 32));
treeSet.add(new Students("xiaoqiang", 32));
treeSet.add(new Students("xiao", 22));
}
}
复制代码
打印结果就只有两个compareTo。。。没有看到equals和hashCode方法的输出语句;
作者:
刘渝灵
时间:
2013-4-19 11:36
这位兄台,这个问题老毕的视频讲的清清楚楚,明明明白。TreeSet保证元素唯一性本来就只依赖compareTo方法。只有HashSet为了保证元素的唯一性才会依赖equals和hashCode方法。Set集合下可不止一个TreeSet哦。
作者:
Miss小强
时间:
2013-4-19 12:14
刘渝灵 发表于 2013-4-19 11:36
这位兄台,这个问题老毕的视频讲的清清楚楚,明明明白。TreeSet保证元素唯一性本来就只依赖compareTo方法。 ...
好吧,我一下子给忘记了。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2