TreeSet自定义排序

首先是我的实现Comparator的类

package com.newedu.jb.day18.set;


import java.util.Comparator;


public class MyComparator implements Comparator<String> {


@Override
public int compare(String o1, String o2) {
//默认是按从到大的顺序进行排序的
return o1.compareTo(o2);
}


}

package com.newedu.jb.day18.set;


public class Stu {

private String name;
private int age;
public Stu(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Stu() {
super();
}
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;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Stu other = (Stu) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}

}

package com.newedu.jb.day18.set;


import java.util.Comparator;


public class StuComparator implements Comparator<Stu> {


@Override
public int compare(Stu o1, Stu o2) {


int num = o1.getName().compareTo(o2.getName());


return num != 0 ? num : (o1.getAge() < o2.getAge() ? 1 : (o1.getAge() == o2.getAge() ? 0 : -1));
}


}

package com.newedu.jb.day18.set;


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


/**
 * TreeSet 的自定义排序:
 * 
 * 
 * 构造方法:
 * TreeSet(Comparator<? super E> comparator) 
          构造一个新的空 TreeSet,它根据指定比较器进行排序。 自定义排序
          
          
  Comparator 接口:
  
  int compare(T o1, T o2) 
          比较用来排序的两个参数。 
 boolean equals(Object obj) 
          指示某个其他对象是否“等于”此 Comparator 


  
  举例说明:
  
  存储字符串类型,并且遍历
  
  存储自定义类型,并遍历
 * @author jerry
 *
 */
public class TreeSetDemo2 {


public static void main(String[] args) {


MyComparator myComparator = new MyComparator();
TreeSet<String> tset = new TreeSet<String>(myComparator);

tset.add("susan");
tset.add("peter");
tset.add("jerry");
tset.add("jerry");//重复的元素不出现。


for(String item :tset){
System.out.println("集合元素:"+item);
}


System.out.println("==========自定义类型=========");

StuComparator stuComparator = new StuComparator();
TreeSet<Stu> tset1 = new TreeSet<Stu>(stuComparator);
Stu s1 = new Stu("jerry",20);
Stu s2 = new Stu("susan",19);
Stu s3 = new Stu("peter",18);
Stu s4 = new Stu("jerry",18);
tset1.add(s1);
tset1.add(s2);
tset1.add(s3);
tset1.add(s4);

for(Stu s :tset1){
System.out.println("集合元素:"+s);
}



System.out.println("=========匿名内部类的形式===========");

TreeSet<Stu> tset2 = new TreeSet<Stu>(new Comparator<Stu>(){


@Override
public int compare(Stu o1, Stu o2) {
int num = o1.getName().compareTo(o2.getName());


return num != 0 ? num : (o1.getAge() < o2.getAge() ? 1 : (o1.getAge() == o2.getAge() ? 0 : -1));
}});


tset2.add(s1);
tset2.add(s2);
tset2.add(s3);
tset2.add(s4);


for(Stu item : tset2){
System.out.println("集合元素:"+item);
}

}


}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值