黑马程序员技术交流社区

标题: TreeSet集合排序演示:使集合本身具有比较功能 [打印本页]

作者: 小穿钉    时间: 2015-11-17 10:25
标题: TreeSet集合排序演示:使集合本身具有比较功能
package cn.set;


import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;


/**
* TreeSet集合的第二种排序,开发中常用,让集合本身具有比较功能,
* 定义一个类是实现Comparator接口,重写compare方法,将该对象作为参数传给TreeSet集合的构造函数
* @author Administrator
*
*/


public class TreeSetDemo_1 {


        public static void main(String[] args) {
                //创建一个TreeSet集合,并调用有参的构造函数,使集合本身具有比较功能
                TreeSet ts = new TreeSet(new NewCompareName());
               
                //向集合中添加元素
                ts.add(new Teacher("李霞",26));
                ts.add(new Teacher("李钢",22));
                ts.add(new Teacher("龙葵",28));
                ts.add(new Teacher("左轮",45));
               
                //按照名字进行排序
                sortName(ts);
        }
       
        /**
         * 用迭代器获取按照名字排序的所有元素
         */
        public static void sortName(TreeSet ts) {
                //使用迭代器获取所有元素
                Iterator it = ts.iterator();
                while(it.hasNext()){
                        //强制向下转换类型
                        Teacher th = (Teacher)it.next();
                        System.out.println(th);
                }
        }


}


/**
* 创建一个Teacher类
* @author Administrator
*
*/
class Teacher{
        //私有成员变量
        private String name;
        private int age;
        //构造函数初始化对象
        public Teacher(String name, int age) {
                super();
                this.name = name;
                this.age = age;
        }
        //set 与get 方法
        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;
        }
        //重写toString方法
        @Override
        public String toString() {
                return "姓名:"+name+"\t年龄"+age;
        }
       
       
}
/**
* 创建新的比较器,按照名字排序
* @author Administrator
*
*/
class NewCompareName implements Comparator{


        @Override
        public int compare(Object o1, Object o2) {
                //强制转换类型
                Teacher t1 = (Teacher)o1;
                Teacher t2 = (Teacher)o2;
                //比较name
                int temp = t1.getName().compareTo(t2.getName());
                return temp==0?t1.getAge()-t2.getAge():temp;
               
        }
       
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2