TreeSet排序
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排序的更多相关文章
- TreeSet排序,存储自己定义对象,自己定义比較器演示样例
Set:无序.不能够反复元素. |--HashSet:数据结构是哈希表.线程是非同步的. 保证元素唯一性的原理:推断元素的hashCode值是否同样. 假设同样,还会继续推断元素的equals方法.是 ...
- 【java】用HashMap计数,用TreeSet排序
package com.tn.hashMap; import java.util.HashMap; import java.util.TreeSet; public class HashMapDemo ...
- TreeSet排序相关总结
java的集合这一块在工作中用得还比较多,有些东西老是忘,因此在此记录下来. TreeSet原理 1.特点 TreeSet是用来排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺 ...
- TreeSet和Comparator 对TreeSet排序
使用TreeSet和Comparator,编写TreeSetTestInner类,要求对TreeSet中的元素"HashSet"."ArrayList".&qu ...
- 排序及重复元素去重的说明,TreeSet,HashSet
先看下面一段代码: package 类集; import java.util.Set; import java.util.TreeSet; class Person{ private String n ...
- Java TreeSet集合排序 && 定义一个类实现Comparator接口,覆盖compare方法 && 按照字符串长度排序
package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.Ru ...
- JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习
JAVA之旅(二十)-HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习 我们继续说一下集合框架 Set:元素是无序(存入和取出的顺序不一定 ...
- SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序。
SortedSet可自动为元素排序. SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序. 练习:自定义类用TreeSet排序. 与HashSet不同, ...
- JAVA基础学习day15--集合二 TreeSet和泛型
一.TreeSet 1.1.TreeSet Set:hashSet:数据结构是哈希表.线程是非同步的. 保证元素唯一性的原理:判断元素的HashCode值是否相同. 如果 ...
随机推荐
- linux命令:scp
有时候ftp被禁用了, 就用scp替代; 命令行: scp from to_user@to_ip:dir_to/file_name 执行该命令之后,按照提示输入to_host的登陆密码即可. scp ...
- 问题:Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?【原创】
现象: 点"是(Y)" 提示信息中提到的error242440_02.xml文件: 问题重现: package poi; import java.io.FileNotFoundEx ...
- spring mvc MultipartFile 上传文件错误解决
Field error in object 'xxxx' on field 'xxxx': rejected value [20129259128131.jpg]; codes [typeMismat ...
- 基于visual Studio2013解决C语言竞赛题之1079狼羊过河
题目 解决代码及点评 /************************************************************************/ /* ...
- Mac上利用Eclipse编译Cocos2d-x
目前使用较多的Cocos2d-x开发平台是XCode,应该是由于大部分Cocos2d-x开发者都是iOS开发出生.但是当我们将XCode开发的Cocos2d-x工程发布Android版本时,每次都需要 ...
- cocos2dx+lua编译Android项目
一.简单介绍 cocos2dx版本号:3.2 二.问题及解决方式 1.为项目开启Native支持,把项目转为C++项目. 1>.项目开启C++ Native支持,操作例如以下图 watermar ...
- swift-var/let定义变量和常量
// Playground - noun: a place where people can play import UIKit //--------------------------------- ...
- Swift - 多层无缝循环滚动背景(SpriteKit游戏开发)
在游戏开发中,比如跑酷游戏.我们需要实现背景的无限循环滚动,来营造运动的效果.除了单层的背景滚动,还有视差滚动. 视差滚动是指让多层背景以不同的速度移动,形成立体的效果,从而带来非常出色的视觉体验. ...
- C陷阱与缺陷代码分析之第1章词法陷阱
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 编译器中负责将程序分解为一个一个符号的部分,称为“词法分析器”.下面看一个例子: if(x > big) bi ...
- [Android Studio 权威教程]Windows下安装Android Studio
从AS 0.5版本号開始使用.也是AS的推行者,在ApkBus公布的第一篇Android Studio Perview 2 获得了50K的浏览,1800多条回复下载. 在我的[Android Stud ...