标题: 关于 Set [打印本页] 作者: 王海飞 时间: 2011-7-21 21:31 标题: 关于 Set Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?作者: 孙斌 时间: 2011-7-21 21:45 标题: 关于Set Set
A collection that contains no duplicate elements. More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2), and at most one null element. As implied by its name, this interface models the mathematical set abstraction.
根据JDK文档中的说明应该用equals,"=="表示对象(对象的地址)是否相同,"equal"表示对象的值是否相同.作者: 匿名 时间: 2011-7-21 22:01
==比较的是对象,equal比较的是值作者: 匿名 时间: 2011-7-21 22:55
Set有两个子类:
|- HashSet
|- 请参看[url=http://bbs.itheima.com/thread-170-1-1.html]HashSet详述[/url]
|- TreeSet
|- TreeSet中保存的每个元素,都必须实现了Comparable接口。 而消除重复的元素,是通过接口中的CompareTo方法来完成的。
public class Person implements Comparable<Person>{
private String name;
private int age;
public Person(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;
}
public int compareTo(Person arg0) {
int result = this.name.compareTo(arg0.getName());
// 若姓名相同,则按照年龄从大到小排序。
if( result == 0){
result = arg0.getAge() - this.age ;
}
return result;
}
public String toString(){
return "姓名:"+this.name+",年龄:"+this.age;
}
}[/code]测试类代码:[code=java]package org.cxy.demo;
import java.util.*;
public class Demo {
public static void main(String[] args){
TreeSet<Person> set = new TreeSet<Person>();
set.add(new Person("No-5",20));
set.add(new Person("No-5",25));
set.add(new Person("No-1",30));
System.out.println(set);
}
}[/code]当姓名相同时,按照年龄从大到小排序。 否则就按照姓名从小到大排序。
程序运行结果:[code=java][姓名:No-1,年龄:30, 姓名:No-5,年龄:25, 姓名:No-5,年龄:20][/code]作者: 匿名 时间: 2011-7-21 22:55 标题: 回复 楼主 的帖子 “equals”和“=”的区别就是:“equals”比较的是堆内存里面的东西,“==”比较的是堆内存的首地址。