黑马程序员技术交流社区
标题:
List和set的比较机制
[打印本页]
作者:
linder_qzy
时间:
2015-3-12 11:08
标题:
List和set的比较机制
Set里边的HashSet保证元素唯一性的原理是判断元素的HashCode值是否相同;
TreeSet保证元素唯一的依据是compareTo方法。相同返回0.
那么List集合里边有这种判断是否相同的机制呢?
我知道List集合里边元素是可以重复的。就是问问有没有这种比较的机制。
作者:
wenke
时间:
2015-3-12 13:26
TreeSet的compareTo()方法是排序的兄弟 唯一是equals
作者:
linder_qzy
时间:
2015-3-12 16:14
wenke 发表于 2015-3-12 13:26
TreeSet的compareTo()方法是排序的兄弟 唯一是equals
这位兄弟你说的不对 TreeSet比较唯一用的就是compareTo(),TreeSet在存入元素的时候根本就不会调用equals方法。
我给你写个自己看下吧
import java.util.*;
class Student implements Comparable
{
private int age;
private String name;
Student(String name,int age)
{
this.age = age;
this.name = name;
}
public int compareTo(Object obj)
{
System.out.println("compareTo");
if(!(obj instanceof Student))
throw new RuntimeException("不是学生类!!");
Student s = (Student)obj;
if(this.age>s.age)
return 1;
if(this.age==s.age)
{
return this.name.compareTo(s.name);
}
return -1;
}
public boolean equals(Object obj){
System.out.println("我是equals");
return false;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
class DemoTreeSet
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet();
ts.add(new Student("张三",18));
ts.add(new Student("李四",19));
ts.add(new Student("王五",19));
ts.add(new Student("赵六",20));
ts.add(new Student("赵六",20));//重复记录
Iterator it = ts.iterator();
while(it.hasNext())
{
Student s = (Student)it.next();
System.out.println(s.getName()+"........"+s.getAge());
}
}
}
/*运行结果
* compareTo
compareTo
compareTo
compareTo
张三........18
李四........19
王五........19
赵六........20
* */
复制代码
如果用到equals方法是会打印“我是equals”这句话的
作者:
wenke
时间:
2015-3-15 09:39
List集合里的contains()方法 包括remove()方法 内部都是通过equanls()方法判断是否包含 或者是否删除成功的 这算是你要知道的比较机制吗
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2