TreeSet

作者: ClearWang | 来源:发表于2017-08-27 19:46 被阅读0次

项目中需要按照时间先后排序,想到了TreeSet。TreeSet实际上调用的TreeMap的put方法,排序分成两种:自然排序和自定义排序,区别在于构造方法不一样:

1.自然排序的构造方法:TreeSet()

构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。

要求:TreeSet中装的对象实现comparable接口,比较的是其compareTo方法

2.自定义排序的构造方法:TreeSet(ComparatorE> comparator)

构造一个新的空 TreeSet,它根据指定比较器进行排序。

要求传入一个实现了Comparator接口的子类对象,或者匿名类对象。

Demo:

public classTestTreeSet {

@Test

public voidtest1()throwsParseException {

String s1 ="2017-07-22 08:00:00";

String s2 ="2017-07-23 08:00:00";

String s3 ="2017-07-24 08:00:00";

String s4 ="2017-07-25 08:00:00";

String s5 ="2017-07-26 08:00:00";

TreeSet treeSet =newTreeSet(newComparator() {

public intcompare(Date o1, Date o2) {

returno1.before(o2)?1:-1;//o1 小于 o2  o2放在二叉树右边  注意新添加进来的永远是o1

}

});

treeSet.add(DateUtil.String2Date(s2));//s2相当于红黑树(本质是二叉树)的根节点

treeSet.add(DateUtil.String2Date(s1));//s1 相当于 o1  s2 相当于 o2

treeSet.add(DateUtil.String2Date(s3));

treeSet.add(DateUtil.String2Date(s4));

treeSet.add(DateUtil.String2Date(s5));

//最后的输出是按照树的中序遍历(左中右的顺序)取出

for(Date date: treeSet) {

System.out.println(date.toLocaleString());

}

}

}

public classDateUtil {

/**

*  Date2String 并格式化输出

* 例如:2017-8-9 19:46:47

*@paramdate日期

*@return2017-8-9 19:46:47

*/

public staticString Date2String(Date date){

SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");

returnsdf.format(date);

}

/**

* String2Date

*@paramdateString

*@return

*@throwsParseException

*/

public staticDate String2Date(String dateString)throwsParseException {

SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");

returnsdf.parse(dateString);

}

}

输出结果:

2017-7-26 8:00:00

2017-7-25 8:00:00

2017-7-24 8:00:00

2017-7-23 8:00:00

2017-7-22 8:00:00

补充:二叉树的遍历的三种方式

前序遍历:中在左边,即中左右的顺序。

中序遍历:中在中间,即左中右的顺序。

后序遍历:中在右边,即左右中的顺序。

例如:

请写出该二叉树的三种遍历结果

先序输出:

A B D G H E C K F I J

中序输出:

G D H B E A K C I J F

后序输出:

G H D E B K J I F C A

相关文章

网友评论

      本文标题:TreeSet

      本文链接:https://www.haomeiwen.com/subject/omdidxtx.html