import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
/*
* TreeMap实现
* 红黑树http://baike.baidu.com/view/133754.html
*/
public class TestTreeSet {
public TestTreeSet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
TreeSet<String> ts = new TreeSet<String>(new InstanceComparator());
ts.add("aa");
ts.add("BB");
ts.add("bb"); // BB和bb被认为是相同的元素,因为BB首先输入,所以打印的是bb
ts.add("DD");
System.out.println(ts.first());
System.out.println(ts.last());
loadSet(ts);
if (ts.contains("bb")) {
System.out.println("Contains bb/BB");
}
/*
* 返回此 set 的部分视图,要求其元素严格小于 toElement。
*/
TreeSet<String> subTs = (TreeSet) ts.headSet("ab");
loadSet(subTs);
/*
* subTs和ts里面的元素是共享的
*
*/
System.out.println("------->subTs and ts store the same objects");
subTs.clear();
loadSet(subTs);
loadSet(ts);
/*
* 报错headSet("ab");
*
* subTs.add("a");
*/
System.out.println("------->subTs and ts store the same objects");
subTs.add("tt");
loadSet(ts);
loadSet(subTs);
ts.remove("aa");
loadSet(ts);
loadSet(subTs);
}
public static void loadSet(Set s) {
Iterator iter = s.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
class InstanceComparator implements Comparator {
/*比较用来排序的两个参数。随第一个参数小于、等于或大于第二个参数而分别返回负整数、零或正整数。
实现程序必须确保对于所有的 x 和 y 而言,都存在 sgn(compare(x, y)) == -sgn(compare(y, x))。(这意味着当且仅当 compare(y, x) 抛出异常时 compare(x, y) 才必须抛出异常。)
实现程序还必须确保关系是可传递的:((compare(x, y)>0) && (compare(y, z)>0)) 意味着 compare(x, z)>0。
最后,实现程序必须确保 compare(x, y)==0 意味着对于所有的 z 而言,都存在 sgn(compare(x, z))==sgn(compare(y, z))。
虽然这种情况很普遍,但并不 严格要求 (compare(x, y)==0) == (x.equals(y))。一般说来,任何违背了这一点的 comparator 都应该清楚地指出这一事实。推荐的语言是“注意:此 comparator 强行进行与等号一致的排序。”
*/ public int compare(Object o1, Object o2) {
String text1 = o1.toString();
String text2 = o2.toString();
return -(text1.compareToIgnoreCase(text2));
}
/*
*
* 比较两个comparator,和我们一个collection集合排序没有关系
* 因此,comp1.equals(comp2) 意味着对于每个对象引用 o1 和 o2 而言,都存在 sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2))。
* 两个不同的comparator!
*/
public boolean equals(Object obj) {
return this.equals(obj);
}
}
分享到:
相关推荐
使用TreeSet和Comparator,编写TreeSetTest2类,要求对TreeSet中的元素1-元素10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列。 如果需要的话可以下载,有写成文章的。有写了一点中文...
Java数据结构--13.Java8数据结构TreeSet 前⾔ ,上⼀篇中对 Set 接⼝最终实现类 HashSet 与 LinkedHashSet 做了介绍与分析,本篇将对另⼀种 Set 接⼝的最终实现类 TreeSet 进⾏ 介绍与分析。 先来看下 TreeSet 完整...
介绍TreeSet集合用法,向TreeSet集合中添加类的对象,此类需实现Comparable接口,有实例,供需要的朋友下载学习。
毕向东Java基础视频教程-集合框架(TreeSet练习).
通过TreeSet类直接对学生成绩实现了排序功能,不必要进行相关额外的排序来实现!
HashSet和TreeSet_围墙之外.rar
用JAVA集合TreeSet写的求并集算法
treemap treeset hashset hashmap 简要介绍
TreeSet 是 Java 中的一个集合类,它实现了 SortedSet 接口,并且使用红黑树作为底层数据结构。TreeSet 具有以下主要特点: 排序性:TreeSet 中的元素是有序的,默认按照元素的自然顺序进行排序。或者,可以在创建 ...
public int compare(String o1,String o2) { return o1.length()-o2.length();... TreeSet ts = new TreeSet(com); ts.add("string"); ts.add("char"); ts.add("nothing�"); System.out.println(ts);
(TreeSet) s.subSet(608, true, 611, true)
用TreeSet添加字符串,按照字符串首字母字母顺序和字符串长度顺序排序
Java SE程序 TreeSet类中自定义CompareTo类Java SE程序 TreeSet类中自定义CompareTo类Java SE程序 TreeSet类中自定义CompareTo类Java SE程序 TreeSet类中自定义CompareTo类Java SE程序 TreeSet类中自定义CompareTo类...
文档摘录 文档摘录文档摘录文档摘录文档摘录文档摘录文档摘录
图书馆管理 1.描述一个图书馆 2.进书,借书卡办理 3.借书,还书 4.查询某书的借出记录 5.查询借书卡的借出记录 6.显示图书列表(按借出次数排序)
JAVA集合框架之List、Map、Set之间的选择~小案例分析:http://blog.csdn.net/qq_23473123/article/details/51240739
HashSet和TreeSet的区别
比较遗憾的是,TreeSet 虽然实现起来也比较简单,但它有着和 HashSet 一样的问题,会自动排序 5:LinkedHashSet去重(有序) 从代码和执行结果可以看出,LinkedHashSet 是到目前为止,实现比较简单,且最终生成的新...
在TreeSet中添加自定义对象,能更好地帮助理解TreeSet
本教程特点: 1.更适合零基础学员: ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅...