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. 我的mysql数据库sql优化原则

    原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...

  2. Let’s do this!新手程序员的入门指南(转)

    计算机科学(Computer Science)无疑是现在最热门的学科之一,这领域的工作薪水高.工作时间弹性,而且科技业对工程师.开发者的需求至今有增无减,科技龙头们随时虎视眈眈着出色的程式开发者.创意 ...

  3. Servlet的学习之Session(5)

    在上一篇中我们介绍了如果使用Session来做一个简单的用户登录案例,在本篇中我们继续使用Session技术来做一个防止表单重复提交的案例. 这是一个很重要的知识点,在很多框架中都有防止表单重复提交的 ...

  4. .net生成Excel,并下载

    生成Excel的方式有很多种,这里记录两个最简单的: 1.将数据保存为html,然后输出到客户端,保存为Excel文件: 2.通过\t\n生成字符串,然后输出到客户端,保存为Excel. 以上两者的原 ...

  5. 纯win32实现PNG图片透明窗体

    #include <windows.h> #include <gdiplus.h> /*  GDI+ startup token */ ULONG_PTR gdiplusSta ...

  6. Fedora Linux 下安装配置C开发环境Code::Blocks

    一.提前的话要说C语言和Linux的关系大家应该都不会陌生,Linux系统内核就是用C语言开发的,所以所有的Linux系统下面 都会有C的编译调试工具,不过这些工具都是命令式的,正式开发的话会很不方便 ...

  7. WTL介绍

    WTL简单介绍 关键词: WTL WTL是一个好东东.它开发的程序都很短小精悍.对开发WIN32的应用有很好的优点.它不用MFC开发.但可以高速产生窗体和控件. 以文本方式查看主题 -  温馨小筑   ...

  8. 事务代码SE16N查看数表时可以使用命令激活编辑功能

    &sap_edit命令可以激活SE16N编辑功能,维护数据表,但是是除了主键不能维护外都可以修改

  9. Git 使用规范流程(转)

    团队开发中,遵循一个合理.清晰的Git使用流程,是非常重要的. 否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护. 下面是ThoughtBot 的Git使用规范流程.我从中 ...

  10. POJ1087 A Plug for UNIX 【最大流】

    A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13855   Accepted: 4635 ...