`
yucang52555
  • 浏览: 70228 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

TreeSet排序

阅读更多
    今天查阅ansj源码是看到权重这里:
    private List<Keyword> computeArticleTfidf(String content, int titleLength) {
		Map<String, Keyword> tm = new HashMap<String, Keyword>();

		List<Term> parse = NlpAnalysis.parse(content);
		for (Term term : parse) {
			double weight = getWeight(term, content.length(), titleLength);
			if (weight == 0)
				continue;
			Keyword keyword = tm.get(term.getName());
			if (keyword == null) {
				keyword = new Keyword(term.getName(), term.natrue().allFrequency, weight);
				tm.put(term.getName(), keyword);
			} else {
				keyword.updateWeight(1);
			}
		}

		TreeSet<Keyword> treeSet = new TreeSet<Keyword>(tm.values());

		ArrayList<Keyword> arrayList = new ArrayList<Keyword>(treeSet);
		if (treeSet.size() <= nKeyword) {
			return arrayList;
		} else {
			return arrayList.subList(0, nKeyword);
		}

	}

     考虑到怕许问题,其实java中接口Set有众多实现类,而HashSet和TreeSet是最常用的两个,通过TreeSet实现排序的2种方式:
1.通过TreeSet(Comparator<? super E> comparator) 构造方法指定TreeSet的比较器进行排序;
2.使用TreeSet()构造方法,并对需要添加到set集合中的元素实现Comparable接口进行排序;
跟踪源代码,可以发现上面的例子,实用的就是第二种方式,查看Keyword类:
public class Keyword implements Comparable<Keyword> 

可以看到该类以下方法:
@Override
public int compareTo(Keyword o) {
		if (this.score < o.score) {
			return 1;
		} else {
			return -1;
		}
	}

接下来我们实现一下第一种方式:
实体类:
public class AA {
 private int num;

 public int getNum() {
  return num;
 }

 public void setNum(int num) {
  this.num = num;
 }
 
 public String toString()
 {
  return "AA:" + this.getNum() + ",";
 }
}

比较器:
import java.util.Comparator;

public class MyComparator implements Comparator<AA> {

 public int compare(AA a1,AA a2) {
  
  if (f1.getNum() > f2.getNum())
  {
   return 1;
  }
  else if (a1.getNum() == a2.getNum())
  {
   return 0;
  }
  else
  {
   return -1;
  }
 }
}

接下来就是使用了:
TreeSet<Foo> set = new TreeSet(new MyComparator());

这样在set.add()元素时就会根据自己定义比较器进行排序了。

程序猿行业技术生活交流群:181287753(指尖天下),欢迎大伙加入交流学习。
分享到:
评论

相关推荐

    尚硅谷-实验:TreeSet的自然排序与定制排序.pdf

    本教程特点: 1.更适合零基础学员: ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅...

    浅谈java中的TreeMap 排序与TreeSet 排序

    在Java编程语言中,`TreeMap` 和 `TreeSet` 是两种基于红黑树数据结构实现的集合类,它们都提供了自动排序的功能。本文将详细探讨 `TreeMap` 和 `TreeSet` 的排序机制以及如何自定义排序规则。 首先,`TreeMap` 是...

    浅谈TreeSet中的两种排序方式

    Java 中 TreeSet 的两种排序方式 TreeSet 是 Java 中一种基于树形结构的 Set 实现,它具有自动排序的功能。在使用 TreeSet 时,我们可以通过实现 Comparable 接口或提供Comparator 对象来指定排序规则。下面,我们...

    学生成绩排序(TreeSet方式实现)

    在这个场景下,我们使用`TreeSet`来实现学生成绩的排序,无需额外的排序操作,这大大简化了代码并提高了效率。 首先,我们需要理解`TreeSet`的工作原理。`TreeSet`内部基于红黑树(Red-Black Tree)数据结构,这是...

    TreeSet 红黑树结构算法

    例如,TreeSet 可以使用自然排序方式创建一个新的 TreeMap,也可以使用定制排序方式创建一个新的 TreeMap。 TreeSet 的方法主要是调用 TreeMap 的方法来提供实现。例如,TreeSet 的 addAll 方法就是调用 TreeMap 的...

    排序之HashSet和TreeSet的区别

    而在`SetTest.java`中,如果我们要测试不同的Set实现并比较它们的性能,或者需要对测试数据进行排序,那么`TreeSet`将是一个合适的工具。 总的来说,理解`HashSet`和`TreeSet`的底层实现和特性,可以帮助开发者根据...

    解决TreeSet类的排序问题

    TreeSet提供两种排序方式:自然排序和定制排序。 1. 自然排序: 自然排序是TreeSet默认的排序方式。当向TreeSet中添加元素时,它会调用这些元素的`compareTo(Object obj)`方法进行比较。这个方法源自`Comparable`...

    中兴Java开发笔试题 JSD1304.docx

    7. TreeSet排序规则: TreeSet在存储元素时,会按照指定的比较器或者元素的自然顺序进行排序。题目中Student类放入TreeSet时,如果想要按照num升序,name降序排序,需要实现Comparable接口并在Student类中重写...

    用TreeSet,添加字符串,按照长度和字母顺序排序

    用TreeSet添加字符串,按照字符串首字母字母顺序和字符串长度顺序排序

    HashSet和TreeSet_围墙之外

    TreeSet则基于TreeMap实现,它维护了元素的排序顺序,可以按照自然排序或自定义比较器进行排序。默认情况下,元素会按照它们的自然顺序(即Comparable接口定义的顺序)排序,如果元素不支持自然排序,可以在创建...

    java 集合框架(TreeSet练习)

    1. **有序性**:`TreeSet`中的元素会根据其自然排序或者自定义比较器进行排序。 2. **唯一性**:不允许有重复元素,如果尝试添加已存在的元素,将会被忽略。 3. **效率**:由于基于红黑树,`add()`, `remove()` 和 `...

    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);

    javaTreeSet实现图书管理系统

    由于`TreeSet`自动排序,可以根据书名、作者或出版日期等进行排序。 - **借书卡办理**:创建一个`Card`类表示借书卡,包含持卡人信息。每个持卡人可以有一个`TreeSet&lt;Book&gt;`记录他们的借阅历史。 3. **借书,还书*...

    JCF(List、Set、Map)学习,实现了<key,value>按value排序噢

    本次我们关注的是Java集合框架中的三类接口:List、Set和Map,以及如何实现它们的特定功能,特别是关于`TreeSet`和`TreeMap`的按值排序。标题中提到的“JCF(List、Set、Map)学习,实现了,value&gt;按value排序”是一个...

    java泛型 用了treeset

    使用TreeSet和Comparator,编写TreeSetTest2类,要求对TreeSet中的元素1-元素10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列。 如果需要的话可以下载,有写成文章的。有写了一点中文...

    treeset 和 hashlist 实现的扑克牌游戏

    `TreeSet`保证了元素的排序性,无论是自然排序还是自定义比较器排序。它不允许有重复元素,并且提供了一种高效的查找、添加和删除元素的方法,时间复杂度通常为O(log n)。 在设计扑克牌游戏时,我们可能需要考虑...

    java教程 答案 耿祥义

    4. Java数据结构:在“上机实践11数据结构”中,提到了“扫雷小游戏”、“排序与查找”以及“使用TREESET排序”。这些内容涉及Java中集合框架的使用,如何通过数据结构(如链表、树、映射)来实现游戏逻辑和数据存储...

    Java集合容器面试题(2022最新版)-重点.docx

    #### TreeMap和TreeSet排序原理 - `TreeMap`和`TreeSet`使用红黑树实现排序。 - 对象需要实现`Comparable`接口或提供`Comparator`对象来指定排序规则。 #### Collections工具类中的sort()方法如何比较元素 - `...

    (TreeSet) s.subSet(608, true, 611, true)

    8. **自定义排序**:通过传递Comparator实例给TreeSet构造函数,可以自定义元素的排序方式。 9. **实际应用**:TreeSet常用于需要排序且对性能有较高要求的场景,例如数据库索引、优先队列等。 以上就是关于标题和...

    Java数据结构--13.Java8数据结构TreeSet.pdf

    在Java集合框架中,TreeSet是一个重要的数据结构,它是Set接口的实现类之一,与HashSet和LinkedHashSet不同,TreeSet具有排序功能,这是因为其不仅继承自AbstractSet,还实现了SortedSet和NavigableSet接口。...

Global site tag (gtag.js) - Google Analytics