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 对于学生对象按照年龄进行排序,年龄小的排在前面. 单单看到这样的需求,实现 ...
随机推荐
- property attribute: assign, strong, weak, unsafe_unretain and copy
assign:用于“纯量类型”(如CGFloat 或 NSInteger等): strong:用于“对象类型”,定义了一种“拥有关系”(owning relationship),为这种属性设置新值时, ...
- RunTime的一些用法
RunTime的一些用法 RunTime简介 RunTime简称运行时.OC就是运行时机制,其中最主要的是消息机制 对于OC来说,在编译的时候并不能决定真正调用哪个函数,只有真正运行时才会根据函数 ...
- android界面横屏和竖屏的切换
关于android横屏和竖屏的切换网上给了很多种.但是有些介绍的方法都是在android旧版本上. 我现在把握用到的情况写下来用于备忘: android 版本:4.0 - 4.4 要求:android ...
- 【转】SVN的dump文件导入
转载地址:http://erniu.sz.blog.163.com/blog/static/11517292220103282813176/ 把SVN的dump文件导入SVN数据库的方法: 在SVN ...
- selenium高亮显示操作步骤方法
package com.allin.pc;import java.util.List;import org.openqa.selenium.WebElement;import org.openqa.s ...
- 【noip新手入门向】OpenJudge1.3-14大象喝水
一.写在前面 我也不知道我为什么要写这个鬼畜的东西←_←才不是为了水blog量什么的(划掉),其实是为了明天给学弟学妹们传教准备. 这道题对完全对c语言没有概念的小萌新们极度友好,可以锻炼小萌新们的代 ...
- nRF52系列来袭,Nordic的低功耗蓝牙方案大有可为
坐落在北欧的挪威不像他的邻居芬兰那样,可以先后依靠NOKIA和愤怒的小鸟在世界科技界享有盛名.在一般人看来,挪威除了一个逐渐式微的Opera浏览器以外,并没有更多拿得出手的科技企业.而事实证明这只 ...
- 配置rt-thread开发环境(配置系统,生成系统镜像)
配置rt-thread开发环境 ===========Python============= 1.Python的下载地址:http://www.python.org/ftp/python/ 链接中有各 ...
- gitlab open ssl
cd /home/git/gitlab/ sudo -u git -H vi config/gitlab.yml sudo -u git -H vi /home/git/gitlab-shell/co ...
- NSTimer(定时器)
[_timer fire]; fire并不是启动一个定时器,只是执行一次定时器事件(触发一次定时器事件)而已; 注意:不影响定时器设置的时间,即,不影响之前设定的使用,定时器该怎么跑就怎么跑,fire ...