TreeSet和Comparator 对TreeSet排序
使用TreeSet和Comparator,编写TreeSetTestInner类,要求对TreeSet中的元素"HashSet"、"ArrayList"、"TreeMap"、"HashMap"、"TreeSet"、"LinkedList"进行升序和倒序排列,并使用匿名内部类和静态内部类分别实现。
方法一:
静态内部类
import java.util.*; public class TreeSetTestInner{ public static void main(String[] args) { TreeSet c = new TreeSet(new MyComparator()); c.add("HashSet"); c.add("ArrayList"); c.add("TreeMap"); c.add("HashMap"); c.add("TreeSet"); c.add("LinkedList"); Iterator it = c.iterator(); while(it.hasNext()) System.out.println(it.next()); } static class MyComparator implements Comparator{ public int compare(Object o1, Object o2){ String s1 = (String)o1; String s2 = (String)o2; //升序 //return s1.compareTo(s2); //降序 return -s1.compareTo(s2); } } }
匿名内部类
import java.util.*; public class TreeSetTestInner2{ public static void main(String[] args) { TreeSet c = new TreeSet(new Comparator(){ public int compare(Object o1, Object o2){ String s1 = (String)o1; String s2 = (String)o2; //升序 //return s1.compareTo(s2); //降序 return -s1.compareTo(s2); } }); c.add("HashSet"); c.add("ArrayList"); c.add("TreeMap"); c.add("HashMap"); c.add("TreeSet"); c.add("LinkedList"); Iterator it = c.iterator(); while(it.hasNext()) System.out.println(it.next()); } }
方法二:
匿名内部类
import java.util.*; public class TreeSetTest3 { public static void main(String[] args){ String[] s = {"HashSet","ArrayList","TreeMap","HashMap","TreeSet","LinkedList"}; TreeSet sts = new TreeSet(); TreeSet jts = new TreeSet(new Comparator(){ public int compare(Object a, Object b){ String s1 = (String)a; String s2 = (String)b; if(s1.compareTo(s2) > 0){ return -1; } else if(s1.compareTo(s2) == 0){ return 0; } else{ return 1; } } }); for(int i = 0; i < 6; i++){ jts.add(s[i]); } for(int i = 0; i < 6; i++){ sts.add(s[i]); } System.out.println("升序"+sts); System.out.println("降序"+jts); } }
静态内部类:
import java.util.*; public class TreeSetTest4 { static class PaiXu{ TreeSet sts; TreeSet jts; public TreeSet daoxu(String[] s){ jts = new TreeSet(new Comparator(){ public int compare(Object a, Object b){ String s1 = (String)a; String s2 = (String)b; if(s1.compareTo(s2) > 0){ return -1; } else if(s1.compareTo(s2) == 0){ return 0; } else{ return 1; } } }); for(int i = 0; i < 6; i++){ jts.add(s[i]); } return jts; } public TreeSet shunxu(String[] s){ sts = new TreeSet(); for(int i = 0; i < 6; i++){ sts.add(s[i]); } return sts; } } public static void main(String[] args){ String[] s = {"HashSet","ArrayList","TreeMap","HashMap","TreeSet","LinkedList"}; PaiXu px = new PaiXu(); px.shunxu(s); px.daoxu(s); System.out.println("升序"+px.sts); System.out.println("降序"+px.jts); } }
TreeSet和Comparator 对TreeSet排序的更多相关文章
- TreeSet实现Comparator接口的排序算法的分析
为了方便,用lambda表达式代替comparator接口 例子如下: public static void main(String[] args) { TreeSet<Integer> ...
- JDK学习---深入理解Comparator、TreeSet、TreeMap为什么可以排序
我本来打算仔细的去分析分析TreeSet和TreeMap排序规则,并且从底层实现和数据结构入手.当我去读完底层源码以后,我感觉我就的目标定的太大了,单单就是数据结构就够我自己写很久了,因此我决定先易后 ...
- Java基础 TreeSet()来实现数组的【定制排序】 : Comparable接口(自然排序) 或者 Comparator接口 (定制排序)
笔记: //排序真麻烦!没有C++里的好用又方便!ORZ!ORZ!数组排序还还自己写个TreeSet()和( Comparable接口(自然排序) 或者 Comparator接口 (定制排序))imp ...
- 用TreeSet和Comparator给list集合元素去重
今天在做导入功能时,看到一个感觉很好的去重算法,特分享给大家看看: 其原理利用了以下几点: 1.TreeSet里面不会有重复的元素,所以当把一个List放进TreeSet里面后,会自动去重 2.Tre ...
- Comparator.comparing比较排序
使用外部比较器Comparator进行排序 当我们需要对集合的元素进行排序的时候,可以使用java.util.Comparator 创建一个比较器来进行排序.Comparator接口同样也是一个函数式 ...
- 使用自定义Comparator对TreeSet中的数据进行多条件排序
代码记录(需求:根据店铺等级和店铺到某个点的距离进行排序,其中店铺等级由高到低,距离由近及远) 需要排序的对象Store,Store.java package com.zhipengs.work.te ...
- TreeSet,Comparator
ThreeSet能够对集合中的对象排序,当TreeSet想集合中加入一个对象时,会把它插入到有序的对象序列中. ThreeSet自带了一个排序方法,这个方法规定了一般数据的排序规则,如果用户想要规定自 ...
- 利用TreeSet给纯数字字符串排序
import java.util.Iterator;import java.util.TreeSet; /* * 给字符串中的数字排序 * String str = "10,2,11,1,3 ...
- 通过实现Comparable接口结合TreeSet来对对象自动排序
经过会遇到这样的情况,对于某个对象数组或者链表要按照一定的规则进行排序,那么我们该怎么做呢? 如遇到这样的需求: 1.需求1 对于学生对象按照年龄进行排序,年龄小的排在前面. 单单看到这样的需求,实现 ...
随机推荐
- js子窗体、父窗体方法互调
var childWindow = $("#editFrame")[0].contentWindow;//获取子窗体的window对象. childWindow.subForm() ...
- 十分钟学会mysql数据库操作
Part1:写在最前 MySQL安装的方式有三种: ①rpm包安装 ②二进制包安装 ③源码安装 这里我们推荐二进制包安装,无论从安装速度还是用于生产库安装环境来说,都是没问题的.现在生产库一般采用My ...
- 欲实施CRM软件,必须先懂什么是CRM软件
CRM是Customer Relationship Management(客户关系管理)的缩写,它是利用信息科学技术,实现市场营销.销售.服务等活动自动化,使企业能更高效地为客户提供满意.周到的服务, ...
- dbutils中实现数据的增删改查的方法,反射常用的方法,绝对路径的写法(杂记)
jsp的三个指令为:page,include,taglib... 建立一个jsp文件,建立起绝对路径,使用时,其他jsp文件导入即可 导入方法:<%@ include file="/c ...
- android 常见的泄漏内存方法和 leakcanary 使用方法
虽然VM接管了内存分配和回收,但是人类在解决问题的同时也会重新创造出一些新的问题,所以问题永远都解决不了,就产生各种稀奇古怪的就业机会了(跑题跑不停). 无论各种VM用什么算法管理内存, 造成内存泄漏 ...
- radius服务器搭建
yum install -y unzip gcc-c++ cd /opt unzip release-stable.zip mv ToughRADIUS-release-stable toughrad ...
- SQL MD5加密
) 加密结果:
- GC overhead limit exceeded填坑心得
我遇到这样的问题,本地部署时抛出异常java.lang.OutOfMemoryError:GC overhead limit exceeded导致服务起不来,查看日志发现加载了太多资源到内存,本地的性 ...
- Python实现各种排序算法的代码示例总结
Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...
- QQ(iOS)客户端的粘性动画效果
qq的app中要是有新的联系人发消息过来,相应联系人的cell右边会有一个红色的圆圈表示消息条数.如果去触碰那个圆圈,可以发现它竟然会跟着手指的移动而移动. 在一定范围内,手指离开屏幕,会发现红色圆圈 ...