java-TreeSet进行排序的2种方式
TreeSet和HashSet的区别在于, TreeSet可以进行排序, 默认使用字典顺序排序, 也可以进行自定义排序
1, 自然排序
2, 比较器排序
自然排序:
1, 需要被排序的类实现Comparable<T>接口
2, 重写其中的 comparato
package xfcy_04;
/**
* Student类
* @author wenbronk
*
*/
public class Student implements Comparable<Student> {
private String name;
private int age;
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;
} @Override
public int compareTo(Student s) {
//return -1; //-1表示放在红黑树的左边,即逆序输出
//return 1; //1表示放在红黑树的右边,即顺序输出
//return o; //表示元素相同,仅存放第一个元素
this.age.compareTo(s.age)return num2;
} }
自定义比较器排序;
这种方法需要一个新的类实现Comparator<T>接口
重写其中的Compare 方法
TreeSet<String> wifiSet = new TreeSet<String>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
JSONObject obj1 = JSON.parseObject(o1);
JSONObject obj2 = JSON.parseObject(o2);
return obj1.getDouble("distance").compareTo(obj2.getDouble("distance"));
}
});
然后, 改成函数式编程可以写成:
Set<JSONObject> treeSet = new TreeSet<>((first, second) -> {
JSONObject base1 = first.getJSONObject("base");
String[] loc1 = base1.getString("location").split(", * ");
JSONObject base2 = second.getJSONObject("base");
String[] loc2 = base2.getString("location").split(", * ");
Double d1 = GeoUtils.getDistance(new Point(Double.valueOf(loc1[]), Double.valueOf(loc1[])),
new Point(lat, lng));
Double d2 = GeoUtils.getDistance(new Point(Double.valueOf(loc2[]), Double.valueOf(loc2[])),
new Point(lat, lng));
return d1.compareTo(d2);
});
然后正常往set中添加元素, 既可以实现自定义排序了
java-TreeSet进行排序的2种方式的更多相关文章
- java集合进行排序的两种方式
java集合的工具类Collections中提供了两种排序的方法,分别是: Collections.sort(List list) Collections.sort(List list,Compara ...
- 几种排序算法及Java实现排序的几种方式
几种排序算法 下面的例子介绍了4种排序方法: 冒泡排序, 选择排序, 插入排序, 快速排序 package date201709.date20170915; public class SortUtil ...
- Java TreeSet集合排序 && 定义一个类实现Comparator接口,覆盖compare方法 && 按照字符串长度排序
package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.Ru ...
- Java中HashMap遍历的两种方式
Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...
- JAVA中集合输出的四种方式
在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello { public stat ...
- java读取XML文件的四种方式
java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...
- java中数组复制的两种方式
在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...
- java动态获取WebService的两种方式(复杂参数类型)
java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...
- java 实现md5加密的三种方式与解密
java 实现md5加密的三种方式 CreateTime--2018年5月31日15点04分 Author:Marydon 一.解密 说明:截止文章发布,Java没有实现解密,但是已有网站可以免费 ...
- Java 读取 .properties 文件的几种方式
Java 读取 .properties 配置文件的几种方式 Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中.然而 XML 配置文件需要通过 ...
随机推荐
- 团队博客-第六周:Alpha阶段项目复审(科利尔拉弗队)
团队的排名-点评:以下排名点评谨代表个人观点,如有冒犯,评论联系删除 小组名字和链接 优点 缺点,bug报告(至少140字) 最终名次(无并列) 中午吃啥队 微信小程序应用,新型app会是一个便利的使 ...
- MRP备忘
mrp自动发放计划 物料:采购员 计划员 自动发放时间栏 提前期 mrp:product profile PO:profile自动生成请求 Auto-Release Planned Orders In ...
- Hyper-V启动虚拟机,消耗C盘大量磁盘空间
问题描述 经常使用Hyper-V虚拟机的朋友,可能会碰到这样的现象,当启动某些虚拟机的是否,发现C盘的空间突然减少,减少的空间与虚拟机的内存一样大少. 通过分析C盘空间的磁盘文件,发现在Hyper-V ...
- westrac server security configure user info
security userkey:westracpass:Set#@!123
- BZOJ 5334--[Tjoi2018]数学计算(线段树)
5334: [Tjoi2018]数学计算 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 220 Solved: 147[Submit][Status ...
- 三,memcached服务的两种访问方式
memcached有两种访问方式,分别是使用telnet访问和使用php访问. 1,使用telnet访问memcacehd 在命令提示行输入, (1)连接memcached指令:telnet 127. ...
- PHP 5.6 如何使用 CURL 上传文件
以前我们通过 PHP 的 cURL 上传文件是,是使用“@+文件全路径”的来实现的: curl_setopt(ch, CURLOPT_POSTFIELDS, array( 'file' => ' ...
- Windows搭建Nexus3私服
1. Nexus 简介 Nexus 是一个强大的 Maven 仓库管理器 , 它极大地简化了自己内部仓库的维护和外部仓库的访问 ; 利用 Nexus 你可以只在一个地方就能够完全控制访问和部署在你所维 ...
- webpack快速入门——实战技巧:webpack模块化配置
首先在根目录,新建一个webpack_config文件夹,然后新建entry_webpack.js文件,代码如下: const entry ={}; //声明entry变量 entry.path={ ...
- JS获取开始、结束时间
/** * 获取本周.本季度.本月.上月的开始日期.结束日期 */ var now = new Date(); //当前日期 var nowDayOfWeek = now.getDay(); //今天 ...