|--------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相对效率要低很多;