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. IOS开发之UIView总结

    如果想调用某个类的某个方法可以写成这样,这个方法来自NSObject类 performSelector: performSelector:withObject: performSelector:wit ...

  2. 6.MIL采集和实时显示

    前面讲到的都是离线的图像获取方法,实际中我们做机器视觉都是在线采集图像和处理,处理结果决定了计算机要给出的控制信号如电机运动等,这样就实现了实时视觉反馈运动.MIL中的采集需要Matrox采集板卡的支 ...

  3. 24篇HTTP博客

    http://www.cppblog.com/woaidongmao/category/11721.html

  4. 学习老外用webstorm开发nodejs的技巧--代码提示DefinitelyTyped

    最近入了nodejs的坑,作为老码农,js对我来说还是很容易的.webstorm虽说用得不多,但是pycharms我是老手了,idea的东西一脉相承,想想也就那样了. 但是自从看了某个视频后,觉得毕竟 ...

  5. C# LDAP认证登录

    LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以根据需要定制.与X ...

  6. 在O(1)时间删除指定链表结点

    #region 在O(1)时间删除指定链表结点 /// <summary> /// 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. /// </summa ...

  7. 关于VC6编译LPDIRECT3D8不通过的问题

    重装了系统,打开以前的工程看看,重新编译发现类似的错误: error C2146: syntax error : missing ';' before identifier 'lpdi' fatal ...

  8. Transformations 方块转换

    题目是中文题,就不做什么解释了,纯模拟题,主要要搞清楚这几种装换方式下标的变化: 第一种:顺时针旋转90度: c[j][n-i+1]=a[i][j]; 第二种:旋转180度: c[n-i+1][n-j ...

  9. Delphi XE7 用indy开发微信公众平台所有功能(10篇博客)

    http://www.cnblogs.com/devinlee/p/4282498.html http://www.cnblogs.com/devinlee/p/4565933.html

  10. uva 357 Let Me Count The Ways(01背包)

    题目连接:357 - Let Me Count The Ways 题目大意:有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值. 解题思路:和uva674是一 ...