您的位置:首页 > 职场人生

黑马程序员-java之TreeSet,Comparable,Comparator

2015-06-01 15:21 465 查看
-------------android培训java培训、---------------

TreeSet可以对元素进行排序,缺省是按照自然排序进行排列,即元素必须实现Comparable接口,或者创建TreeSet对象的时候必须指定一个比较器

且元素唯一。

排序的两种方式:

方式一:让元素自身具备比较性,即让元素类实现Comparable接口,覆写compareTo(),这种排序方式是默认排序,也叫自然排序

方式二:当元素自身不具备比较性时,或者所具备的比较性不是实际需要的,这是就需要让集合TreeSet具备比较性,即在创建集合对象的时候指定比较器

当两种都存在时候,用比较器

原理:二叉树结构(左叉值小于右叉值),新元素大于原有元素,则放在叉的右边,小于则放在左边,等于则不存储

实例:存储自定义对象

代码:

package com.itheima;

import java.util.Comparator;

import java.util.Iterator;

import java.util.TreeSet;

class Student implements Comparable{

private String name;

private int age;

Student(String name,int age){

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 int compareTo(Object obj){//先按年龄比较,年龄相同则按名字自然排序

if(!(obj instanceof Student)){

throw new RuntimeException(obj.toString()+"不是学生");

}

Student stu = (Student)obj;

//System.out.println(this.name+"---compareTo---"+stu.name);

if(this.age>stu.age)

return 1;

if(this.age==stu.age){

return this.name.compareTo(stu.name);

}

return -1;

}

}

class myComparator implements Comparator{//先按姓名自然排序,姓名相同则按年龄升序排序

public int compare(Object o1,Object o2){

Student s1 = (Student)o1;

Student s2 = (Student)o2;

int num = s1.getName().compareTo(s2.getName());

if(num==0){

return new Integer(s1.getAge()).compareTo(s2.getAge());

}

return num;

}

}

public class TreeSetDemo {

public static void main(String[] args) {

// TODO Auto-generated method stub

TreeSet ts = new TreeSet();//创建TreeSet对象

TreeSet ts2 = new TreeSet(new myComparator());

ts.add(new Student("zhangsan",18));//添加元素到对象ts

ts.add(new Student("lisi",22));

ts.add(new Student("wangwu",18));

ts.add(new Student("zhaoliu",19));

ts2.add(new Student("zhangsan",18));//添加元素到ts2

ts2.add(new Student("lisi",22));

ts2.add(new Student("wangwu",18));

ts2.add(new Student("zhaoliu",19));

ts2.add(new Student("wangwu",23));

Iterator it = ts.iterator();

Iterator it2 = ts2.iterator();

System.out.println("----------ts中的元素------------");

while(it.hasNext()){

Student stu = (Student)it.next();

System.out.println(stu.getName()+"---"+stu.getAge());

}

System.out.println("----------ts2中的元素------------");

while(it2.hasNext()){

Student stu2 = (Student)it2.next();

System.out.println(stu2.getName()+"---"+stu2.getAge());

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: