黑马程序员技术交流社区
标题:
个人总结Set集合的特点
[打印本页]
作者:
唐志兵
时间:
2012-6-11 11:23
标题:
个人总结Set集合的特点
Set:集合里面的元素是无序的(存入和取出的顺序不一致),元素不可以重复。
HashSet:底层数据结构是哈希表,线程是非同步的。
HashSet是如何保证元素的唯一性的呢?
1,是通过元素的两个方法,hashCode和equals。
2,如果两个hashCode值相同,才会判断equals是否为true。
3,如果元素的HashCode值不同,不会调用equals。
对于判断元素是否存在,以及删除等操作,依赖的也是元素的hashCode和equals方法。
TreeSet:可以对集合中的元素进行排序。
1,添加的元素一定要具有比较性。
2,什么是比较性,比较性就是指一个对象是否拥有compareTo方法
3,自己创建的类没有比较方法怎么办?可以让类实现 Comparable接口,并实现其中的compareTo方法。
4,排序时,当主要条件相同时,一定要判断一下次要条件。
TreeSet源码实例
import java.util.TreeSet;
import java.util.Iterator;
public class TreeSetTest {
private static void printString(Object next) {
System.out.println(next);
}
public static void main(String[] args) {
TreeSet ts = new TreeSet();
ts.add(new myStudent("lisi02",22));
ts.add(new myStudent("lisi07",25));
ts.add(new myStudent("lisi04",23));
ts.add(new myStudent("lisi05",24));
ts.add(new myStudent("lisi08",24));
ts.add(new myStudent("lisi06",26)); //
Iterator it = ts.iterator();
while(it.hasNext()){
printString(((myStudent)it.next()).getName());
}
}
}
class myStudent implements Comparable{ //强制让这个类具备比较性
private String name;
private int age;
public myStudent(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Object o) {
myStudent ms = (myStudent)o;
System.out.println(this.getName() + " compareTo " + ms.getName());
if(!(ms instanceof myStudent)){
return 0;
}
if(this.age > ms.age)
return 1;
if(this.age == ms.age)
return this.name.compareTo(ms.name);
return -1;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2