TreeSet的排序能够通过两种方法来实现:

1.通过TreeSet(Comparator<?
super E> comparator) 构造方法指定TreeSet的比較器进行排序。

2.使用TreeSet()构造方法。并对须要加入到set集合中的元素实现Comparable接口进行排序;

方法一样例:

person类:

public class Person {
private String name;
private int age;
private String date; 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;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public Person(String name) {
this.name=name;
}
public Person() {
} @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", date=" + date + "]";
}
public Person(String name, int age, String date) {
super();
this.name = name;
this.age = age;
this.date = date;
} }

自己实现比較器:

import java.util.Comparator;
public class MyComparator implements Comparator<Person>{
@Override
public int compare(Person p1, Person p2) {
if(p1.getAge()>p2.getAge()){
return 1;
}else if(p1.getAge()==p2.getAge()){
return 0;
}else{
return -1;
}
} }

測试数据:

@Test
public void treeSet(){//全部元素总是依据指定排序规则保持有序状态。 Set<Person> set = new TreeSet<Person>(new MyComparator());
set.add(new Person("aaa", 67, "254"));
set.add(new Person("bbb", 16, "254"));
set.add(new Person("ccc", 1, "254"));
set.add(new Person("ddd", 675, "254"));
System.out.println(set);
}

结果:

方法二样例:

person类,须要实现Comparable接口,并重写compareTo()方法。compareTo方法中定义排序的方式

public class Person2 implements Comparable {
private String name;
private int age;
private String date; 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;
} public String getDate() {
return date;
} public void setDate(String date) {
this.date = date;
} public Person2(String name) {
this.name = name;
} public Person2() {
} @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", date=" + date + "]";
} public Person2(String name, int age, String date) {
super();
this.name = name;
this.age = age;
this.date = date;
} @Override
public int compareTo(Object obj) {
if (obj instanceof Person2) {//instanceof推断内存中实际对象obj是不是Person2类型
Person2 p = (Person2) obj;
if (this.age > p.getAge()) {
return 1;
} else if (this.age == p.getAge()) {
return 0;
} else {
return -1;
}
}
return 0;
} }

測试数据:

@Test
public void treeSet2(){
Set<Person2> set = new TreeSet<Person2>();
set.add(new Person2("aaa", 67, "254"));
set.add(new Person2("bbb", 16, "254"));
set.add(new Person2("ccc", 1, "254"));
set.add(new Person2("ddd", 675, "254"));
System.out.println(set);
}

測试结果:

[Person [name=ccc, age=10, date=254], Person [name=eee, age=12, date=254], Person [name=bbb, age=16, date=254], Person [name=aaa, age=67,
date=254], Person [name=ddd, age=675, date=254]]

TreeSet排序的更多相关文章

  1. TreeSet排序,存储自己定义对象,自己定义比較器演示样例

    Set:无序.不能够反复元素. |--HashSet:数据结构是哈希表.线程是非同步的. 保证元素唯一性的原理:推断元素的hashCode值是否同样. 假设同样,还会继续推断元素的equals方法.是 ...

  2. 【java】用HashMap计数,用TreeSet排序

    package com.tn.hashMap; import java.util.HashMap; import java.util.TreeSet; public class HashMapDemo ...

  3. TreeSet排序相关总结

            java的集合这一块在工作中用得还比较多,有些东西老是忘,因此在此记录下来. TreeSet原理 1.特点 TreeSet是用来排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺 ...

  4. TreeSet和Comparator 对TreeSet排序

    使用TreeSet和Comparator,编写TreeSetTestInner类,要求对TreeSet中的元素"HashSet"."ArrayList".&qu ...

  5. 排序及重复元素去重的说明,TreeSet,HashSet

    先看下面一段代码: package 类集; import java.util.Set; import java.util.TreeSet; class Person{ private String n ...

  6. Java TreeSet集合排序 && 定义一个类实现Comparator接口,覆盖compare方法 && 按照字符串长度排序

    package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.Ru ...

  7. JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习

    JAVA之旅(二十)-HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习 我们继续说一下集合框架 Set:元素是无序(存入和取出的顺序不一定 ...

  8. SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序。

      SortedSet可自动为元素排序. SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序.   练习:自定义类用TreeSet排序. 与HashSet不同, ...

  9. JAVA基础学习day15--集合二 TreeSet和泛型

    一.TreeSet 1.1.TreeSet Set:hashSet:数据结构是哈希表.线程是非同步的.        保证元素唯一性的原理:判断元素的HashCode值是否相同.         如果 ...

随机推荐

  1. EasyUI - DataGrid 组建 - [ 排序功能 ]

    效果: 红框的字段看,为设置了,列排序,向后台Post数据sort/order. 原理:向后台POST数据,sort/post数据. html代码: <table id="tab&qu ...

  2. delphi中左右翻转窗体(修改EXStyle)

    unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Form ...

  3. spring 整合redis

    用的是最新的jedis-2.6.2.jar这个包,这个和以前的有点不同.还需要添加spring-data-redis-1.2.1.RELEASE.jar和commons-pool2-2.3.jar. ...

  4. python模块介绍- HTMLParser 简单的HTML和XHTML解析器

    python模块介绍- HTMLParser 简单的HTML和XHTML解析器 2013-09-11 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq ...

  5. quartz 2.1学习(一)

    quartz是一种开源任务调度框架,提供了强大的任务调度机制,Quartz允许开发人员灵活地定义触发器的调度时间表,并可对触发器和任务进行关联映射.废话不多说了,介绍一下编程的基本步骤: 实现Job接 ...

  6. ASP.NET - 一般处理程序获取session值

    1.要在一般处理程序中获取其他页面的session值,需要引用名空间: using System.Web.SessionState; 2.然后继承一个接口:IRequiresSessionState, ...

  7. 终于懂了:TWinControl.DefaultHandler里的CallWindowProc(FDefWndProc)还挺有深意的,TButton对WM_PAINT消息的处理就是靠它来处理的(以前不明白为什么总是要调用inherited,其实就是没有明白TWinControl.DefaultHandler的真正用处)

    我忽然发现:TButton既没有处理WM_PAINT,又没有Paint()或者PaintWindow(),那么它是什么时候被绘制的? Form1上放2个TButton,然后设置代码: procedur ...

  8. Swift - 使用set,get确保索引加减在正常的范围内

    通过类的计算属性set和get,我们可以对索引的加减进行保护.下面是一个样例,索引index初始值是0,有效范围是0~2.不管是index++还是index--,索引都是一直在这个范围能循环遍历. 1 ...

  9. iOS 网络错误-分类

    在进行网络数据交换的时候总是遇到各种各样的错误. 这些网络错误是来自client还是server. 我们来梳理一下: 我们将错误分为三个大类 操作系统错误 http请求错误 应用错误 1.操作系统错误 ...

  10. Python IDLE 快捷键

    Python IDLE  快捷键 编辑状态时: Ctrl + [ .Ctrl + ] 缩进代码 Alt+3 Alt+4 注释.取消注释代码行 Alt+5 Alt+6 切换缩进方式 空格<=> ...