TreeSet是有序的集合,继承自AbstractSet
TreeSet泛型类,需要实现comparable接口中的CompareTo方法,即可进行相关排序。
实现CompareTo方法时要注意,因为TreeSet的add方法不重复,返回为0的时候,add添加不进去(返回为1或者-1的时候,颠倒顺序可用于倒序、正序的调整),例如:
@Override
public int compareTo(TopWeb o) {
if (this.pv < o.pv)
{
return 0;
}
return -1;
}
这个时候当两个TopWeb对应的对象,假如此次填入this.pv=8000,而对比TreeSet集合中已经存在的o.pv为10000,进行比较此次填入的值返回为0,此处就会判断为this将要添加的对象和对比对象相等(跟判断hashCode相等类似,此处add添加的时候仅通过comparable进行判断,不在判断hashcode),所以add添加不进去,TreeSet集合中的数据不变。
练习:根据对象的pv(流量)大小排序,同时打印出流量最靠前的两个网站
import lombok.Data;
import java.util.*;
public class ForTest {
public static void main(String[] args) {
TopWeb tw = new TopWeb("www.shukw.com", 89551);
TopWeb tw1 = new TopWeb("m.199zw.com", 2782);
TopWeb tw2 = new TopWeb("www.qu.la", 42665);
TopWeb tw3 = new TopWeb("m.bqg5200.com", 140740);
TreeSet<TopWeb> set = new TreeSet<>();
set.add(tw);
set.add(tw1);
set.add(tw2);
set.add(tw3);
Iterator<TopWeb> it = set.iterator();
int index = 0;
while (it.hasNext() && index < 2)
{
System.out.println(it.next());
index++;
}
}
}
@Data class TopWeb implements Comparable<TopWeb> {
private String url;
private int pv;
public TopWeb(String url, int pv) {
this.url = url;
this.pv = pv;
}
@Override public int compareTo(TopWeb o) {
if (this.pv < o.pv) {
return 1;
} else if (this.pv == o.pv) {
return 0;
}
return -1;
}
}