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

黑马程序员对TreeSet集合中的元素排序的两种方式

2014-12-21 09:39 411 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
TreeSet对元素进行排序的方式一:让元素自身具有比较功能,元素需要实现Comparable接口,覆盖compareTo方法

package org.blog.test2;

import java.util.TreeSet;

class Person implements Comparable{

private String name;

private int age;

Person(String n,int a){

this.setName(n);

this.setAge(a);

}

public String getName(){

return name;

}

public void setName(String n){

this.name=n;

}

public int getAge(){

return age;

}

public void setAge(int a){

this.age=a;

}

//先按年龄比较,如果年龄相同再按姓名比较是否相同

public int compareTo(Object o) {

Person p=(Person)o;

int temp=this.age-p.age;

return temp==0?this.name.compareTo(p.name):temp;

}

public String toString(){

return "姓名:"+name+"年龄:"+age;

}

}

public class TreeSetDemo {

public static void main(String[] args) {

TreeSet<Person> ts=new TreeSet<Person>();

ts.add(new Person("xiaoqiang",23));

ts.add(new Person("lisi",20));

ts.add(new Person("wangwu",23));

ts.add(new Person("suimei",19));

System.out.println(ts);

}

}

输出结果:[姓名:suimei年龄:19, 姓名:lisi年龄:20, 姓名:wangwu年龄:23, 姓名:xiaoqiang年龄:23]

由此可以看出年龄都为23岁时,wangwu和xiaoqiang又进行了姓名的排序。

TreeSet对元素进行排序的方式二:让集合具备比较功能,定义一个类实现Comparator接口,覆盖Compare方法,然后把该类对象作为参数传递给TreeSet集合的构造函数。

package org.blog.test2;

import java.util.Comparator;

import java.util.Iterator;

import java.util.TreeSet;

//定义学生类

class Student{

private String name;

private int age;

Student(String n,int a){

this.setName(n);

this.setAge(a);

}

public String getName(){

return name;

}

public void setName(String n){

this.name=n;

}

public int getAge(){

return age;

}

public void setAge(int a){

this.age=a;

}

//覆写toString方法

public String toString(){

return "姓名:"+name+"年龄:"+age;

}

}

//定义一个类实现Comparator接口

class ComparatorByName implements Comparator<Student>{

//覆盖Compare方法

public int compare(Student o1, Student o2) {

Student s1=(Student)o1;

Student s2=(Student)o2;

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

return temp==0?s1.getAge()-s2.getAge():temp;//如果姓名相同就比较年龄

}

}

public class TreeSetDemo2 {

public static void main(String[] args) {

//该类对象作为参数传递给TreeSet集合的构造函数

TreeSet<Student> ts=new TreeSet<Student>(new ComparatorByName());

//把学生类作为对象存储到集合中

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

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

ts.add(new Student("xiaomei",20));

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

ts.add(new Student("hanhong",27));

Iterator<Student> it=ts.iterator();

while(it.hasNext()){

//向下转型

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

System.out.println(s.getName()+s.getAge());

}

}

}

输出结果:hanhong27

lisi22

lisi23

wangwu25

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