黑马程序员对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
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
相关文章推荐
- 黑马程序员------TreeSet集合框架存储自定义元素之排序Comparable与Comparator
- 黑马程序员训练营---------TreeSet集合中对象进行排序的两种方式
- 黑马程序员 TreeSet排序的两种实现方式
- 黑马程序员_Treeset存储对象的两种方式
- 集合的特殊功能之TreeSet集合如何保证元素的唯一及排序的
- 自定义类的对象作为TreeSet元素的两种方法排序浅谈
- Java基础知识强化之集合框架笔记44:Set集合之TreeSet保证元素唯一性和自然排序的原理和图解
- TreeSet(有序集合)对Comparable元素的排序(或使用Comparator)与元素equals方法的关系
- TreeSet集合的两种排序
- 黑马程序员自学笔记————对于TreeSet实现排序的两种方法;
- 黑马程序员——TreeSet集合添加元素的原理
- 个性集合之TreeSet类的元素有序性排序和元素唯一性的特点
- 《java入门第一季》之集合框架TreeSet存储元素自然排序以及图解
- 集合框架_TreeSet的add()方法源码再次解读和TreeSet对元素排序的总结
- TreeSet集合的比较方式和元素唯一性的原理。
- Java基础知识强化之集合框架笔记47:Set集合之TreeSet保证元素唯一性和比较器排序的原理及代码实现(比较器排序)
- 浅谈TreeSet中的两种排序方式
- 《java入门第一季》之集合框架TreeSet存储元素自然排序以及图解
- 黑马程序员_集合HashMap练习:获取Map集合元素的两种方式:keySet()和entrySet()方法
- 黑马程序员_009_TreeSet的两种排序方式和HashSet保持元素唯一性的方式