import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet();
//ts.add("abc");
//ts.add("Dbc");
//ts.add("cac");
//添加自定义对象
ts.add(new Student("lisi001", 20));
ts.add(new Student("lisi007", 21));
ts.add(new Student("lisi006", 22));
ts.add(new Student("lisi005", 22)); //我是说
Iterator it = ts.iterator();
while(it.hasNext()){
Student s = (Student)it.next();
System.out.println(s.getName()+"----"+s.getAge());
}
}
}
class Student implements Comparable
{
private String name;
private int age;
Student(String name, int age)
{
this.name = name;
this.age = age;
}
public int compareTo(Object obj)
{
if (!(obj instanceof Student)) {
throw new RuntimeException("非Student");
}
Student s = (Student) obj;
if (this.age > s.age) {
return 1;
} else if (this.age == s.age){
return this.name.compareTo(s.name);
} else {
return -1;
}
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
Set:无序,不可重复元素
|---HashSet: 数据结构式哈希表;线程是非同步的。
保证元素的唯一性的原理:判断元素的hashCode值是否相等
如果相同,还会继续判断元素的equals方法,是否为true。
|---TreeSet: 可以对Set集合中的元素进行排序。
底层数据结构是二叉树
保证元素唯一性的依据
compareTo方法return 0;
TreeSet排序方式的第一种方式:让元素自身具备比较性;元素需要实现compareable接口,覆盖compareTo方法;
按照字符串长度来排序
import java.util.*;
class StringOrderSet
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet(new strLenOrder());
ts.add("aaa");
ts.add("abab");
ts.add("acabc");
ts.add("ababd");
Iterator it = ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
class strLenOrder implements Comparator
{
public int compare(Object obj1, Object obj2)
{
String s1 = (String)obj1;
String s2 = (String)obj2;
int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
//如果长度一样的话 就按照字符来比较
if(num == 0)
return s1.compareTo(s2);
return num;
}
}