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>() {@Overridepublic 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[1]), Double.valueOf(loc1[0])),new Point(lat, lng));Double d2 =  GeoUtils.getDistance(new Point(Double.valueOf(loc2[1]), Double.valueOf(loc2[0])),new Point(lat, lng));return d1.compareTo(d2);});

然后正常往set中添加元素, 既可以实现自定义排序了

java-TreeSet进行排序的2种方式相关推荐

  1. java集合进行排序的两种方式

    java集合的工具类Collections中提供了两种排序的方法,分别是: Collections.sort(List list) Collections.sort(List list,Compara ...

  2. java读取XML文件的四种方式

    java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...

  3. java直接调用复制文件,java中文件复制的4种方式,java文件的复制

    java中文件复制的4种方式,java文件的复制 今天一个同事问我文件复制的问题,他一个100M的文件复制的指定目录下竟然成了1G多,吓我一跳,后来看了他的代码发现是自己通过字节流复制的,定义的字节数 ...

  4. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  5. Java转JSON串的几种方式

    以下总结一下java转JSON串的几种方式: 1.将java对象转成json串 2.通过JSONObject生成json串 3.通过json字符串生成json串 代码通过阿里的fastjson包实现. ...

  6. JAVA中集合输出的四种方式

    在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello {public stati ...

  7. 返回ajax有几种方式,java ajax返回 Json 的 几种方式

    方式 1. : 自写代码转 Json 需要  HttpHttpServletRequest request  HttpServletResponse response 后台 : @RequestMap ...

  8. Java字符串反转常用的2种方式

    Java字符串反转常用的2种方式 1.利用StringBuilder封装的reverse()方法 2.利用数组进行反转 ①先将字符串转换为char类型的数组 ②对char类型数组进行反转 public ...

  9. java中Map遍历的四种方式

    java中Map遍历的四种方式 在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方 ...

  10. mysql排序的四种方式

    mysql排序的四种方式 第一种,默认排序 第二种,field函数排序 第三种,条件排序 第四种,多重条件排序 第一种,默认排序 按照 order by 字段1 desc/asc, 字段2 desc/ ...

最新文章

  1. fullfile函数作用
  2. 安装oracle 11gR2单实例+ASM
  3. TensorFlow:深度学习框架TensorFlow TensorFlow_GPU的简介、安装、测试之详细攻略
  4. 训练FCN时遇到的问题总结
  5. c语言mergesort 参数,归并排序C语言兑现MergeSort
  6. 1104: 求因子和(函数专题)
  7. 一键安装mysql5.6_一键安装MySQL5.6.43脚本
  8. 华为鸿蒙系统费电吗,华为鸿蒙系统优势在哪里?
  9. 分时系统是计算机网络嘛,简述计算机网络与分时多用户系统多机系统分布式系统的区别...
  10. 【ES】分布式调度系统之 Elastic-Job-Lite
  11. HDU4609 FFT
  12. git rebase --onto
  13. 03-body标签中相关标签
  14. android渠道包作用,Android多渠道打包的作用及简单使用
  15. 【练习】canvas——flappyBird
  16. 叉积 微分 恒等式_单摆-微分方程浅谈
  17. .NET主流的ORM框架
  18. python 调试,Python 学习入门--pydev调试
  19. 骑行318、 2016.7.26
  20. 常见数据结构及特点介绍

热门文章

  1. jumpserver堡垒机 (资源)
  2. 使用Excel函数时,注意函数对于大小写的区分(vlookup函数不区分大小写)
  3. 关于【画面文言修正】 的 注意点。 (1.确认文字风格 2 从整体来去确认风格)
  4. 在使用SVN,下载文件到本地时,一定要把全目录下载下来!
  5. yarn install node-sass(gulp-sass) 安装失败解决方案
  6. Python Error: “ImportError: No module named six”,用自动安装解决依赖问题
  7. 对预检请求的响应未通过访问控制检查
  8. 实例化新的Android片段的最佳做法
  9. 如何从GET参数获取值?
  10. 如何在电脑上删除磁盘碎片