|--------TreeSet 数据结构是二叉树,比较方式很优秀,遍历的速度很快。
TreeSet可以对集合中的元素进行排序:
一、让元素自身具有比较性:
实现Comparable接口,并且覆盖里面的
compareTo方法。通过teturn 0判断元素是否相同,来保证数据的唯一性。
class Person implements Comparable
{
private String name;
private int age;
public Person(String name,int age) {
// TODO Auto-generated constructor stubt
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 String toString()
{
return "name="+name+"age="+age;
}
@Override//通过复写compareTO方法定义排序功能。
public int compareTo(Object arg0) {
// TODO Auto-generated method stub
Person s=(Person)arg0;
if(this.age>s.age)
return -1;
if(this.age==s.age)
return this.name.compareTo(s.name); //这里很重要 ,如果年龄相同再判断名字是否相同 ,如果直接return 0则不能保证数据的唯一性,这与二叉树的排序方式有很大关系 ,回去补补数据结构 。。。。。
return 1;
}
}
--------------------------------------------------------
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetDemo {
/**
* @param args特点:可以对SET集合中的元素进行排序。
* 住treeset里排序,必须有排序规则。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet ts=new TreeSet();
ts.add(new Person("zhangsan", 22));
ts.add(new Person("lisi", 32));
ts.add(new Person("wangwu", 21));
ts.add(new Person("shouliu", 42));
ts.add(new Person("yishi", 42));
for (Iterator iterator = ts.iterator(); iterator.hasNext();) {
System.out.println(iterator.next());
}
}
}
第一种排序方法 有局限性:当元素不具备比较性,或者元素自身具备的比较性不是所需要的,这时就需要第二种排序方式
二、让容器一初始化就具有比较性:
import java.util.*;
public class TreeSetDemo2 {
public static void main(String args[])
{
TreeSet ts=new TreeSet(new MYcompara()); //构造方法回放参数 ,也可以用匿名内部类
ts.add(new Person("zhangsan", 22));
ts.add(new Person("lisi", 32));
ts.add(new Person("wangwu", 21));
ts.add(new Person("shouliu", 42));
ts.add(new Person("yishi", 42));
ts.add(new Person("yishi", 42));
for (Iterator iterator = ts.iterator(); iterator.hasNext();) {
System.out.println(iterator.next());
}
}
}
class MYcompara implements Comparator //根据需要定义比较器 。
{
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
Person s1=(Person)o1;
Person s2=(Person)o2;
if(s1.getAge()>s2.getAge())
return 1;
if(s1.getAge()==s2.getAge())
return s1.getName().compareTo(s2.getName());
return -1;
}
}
class Person2
{
private String name;
private int age;
public Person2(String name,int age) {
// TODO Auto-generated constructor stubt
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 String toString()
{
return "name="+name+"age="+age;
}
}
简要分析一下:
学习了 ArrayList,linkedlist,hashSet,TreeSet 这四种集合, ARRAYLIST查找方便 ,linkedlist增删更快,适合有频繁增删操作的对象 ,hashset无序所以效率较高 ,TREESET相对效率要低很多;
Leo 2012_5_8