- 浏览: 364678 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
Java通过TreeSet可以实现对元素的排序。排序规则通过元素类实现Comparable接口,然后重写该Comparable接口的ComparaTo方法来规定。
这里我们有一个FileNode类, 让该类实现Comparable,并通过对比文件的路径长短来排序。
排序按照文件路径'从近到远'(就是d:/1->d:/1/1->d:/1/1/1)
这里要根据compareTo返回的值进行排序。
要注意的就是假如返回的是0, 那么程序就会认定两个对象是相同的, 那么调用该方法的this对象就不会被存入TreeSet当中。
假如返回的是负数, 那么程序就会将重新排序。
这里的一个重点就是, compareTo(参数对象)这里的参数。
Java在这里并不是将this对象和排序的最后一个进行对比, 而是和第一个进行对比。
假如我们这里将三个文件路径依次放入TreeSet,
treeSet.add("d:/1/2/3");
treeSet.add("d:/1/2");
treeSet.add("d:/1");
那么程序的执行顺序就是:
在执行add("d:/1/2")的时候, 将两个参数进行对比,结果返回负数。
此时的treeSet是["d:/1/2","d:/1/2/3"]
在执行add("d:/1")的时候, 继续进行对比。
只是此时的参数并不是d:/1/2/3, 而是最短的d:/1/2。
对比结果为负数, 于是两个元素互换.
执行结果为
["d:/1","d:/1/2","d/1/2/3"]
这里我们有一个FileNode类, 让该类实现Comparable,并通过对比文件的路径长短来排序。
排序按照文件路径'从近到远'(就是d:/1->d:/1/1->d:/1/1/1)
public class FileNode implements Comparable<FileNode>{ File self; private Set<FileNode> childList; public File getSelf() { return self; } public void setSelf(File self) { this.self = self; } public FileNode(File self) { this.self = self; } private String getSelfPath(){ return this.self.getAbsolutePath(); } @Override public int compareTo(FileNode o) { if(this.getSelfPath().equals(o.getSelfPath())){ return 0; } else{ return this.getSelfPath().length()-o.getSelfPath().length(); //这里如果结果是负数, 那么两个对象就会互换位置. } } }
这里要根据compareTo返回的值进行排序。
要注意的就是假如返回的是0, 那么程序就会认定两个对象是相同的, 那么调用该方法的this对象就不会被存入TreeSet当中。
假如返回的是负数, 那么程序就会将重新排序。
这里的一个重点就是, compareTo(参数对象)这里的参数。
Java在这里并不是将this对象和排序的最后一个进行对比, 而是和第一个进行对比。
假如我们这里将三个文件路径依次放入TreeSet,
treeSet.add("d:/1/2/3");
treeSet.add("d:/1/2");
treeSet.add("d:/1");
那么程序的执行顺序就是:
在执行add("d:/1/2")的时候, 将两个参数进行对比,结果返回负数。
此时的treeSet是["d:/1/2","d:/1/2/3"]
在执行add("d:/1")的时候, 继续进行对比。
只是此时的参数并不是d:/1/2/3, 而是最短的d:/1/2。
对比结果为负数, 于是两个元素互换.
执行结果为
["d:/1","d:/1/2","d/1/2/3"]
发表评论
-
Socket编程的HelloWorld实例
2014-11-07 15:05 854public class Client { ... -
ImageIO宋体出现小方框的解决
2014-11-03 16:34 875http://www.blogjava.net/yuanqix ... -
ArrayList根据条件+for循环批量删除的方法
2014-09-23 11:39 2675场景如下: ArrayList<Obj> list ... -
Java内部类的实例化
2014-08-06 15:51 993class A{ getInstance(){ ... -
通过Thread.sleep把任务平均分配给线程按顺序执行的小例子
2014-07-22 10:46 1024package com.lj.test.JavaSe4; ... -
输入两个整数, 计算百分比
2014-07-21 18:01 1426public static String getPercen ... -
timer cancel方法的一个小实例
2014-07-21 12:14 1089package com.lj.timer; import ... -
通过Calendar获取上个月的最后一天
2014-06-26 12:11 2813Calendar cal=Calendar.getI ... -
通过BigInteger进行数字进制的相互转换
2014-06-24 11:09 24891. 十六进制转换为十进制 BigInteger deci ... -
[转]RSA实例
2014-06-18 17:27 866package com.lj.rsa; import j ... -
[转]sun.misc.BASE64Encoder找不到jar包的解决方法
2014-06-18 15:43 9101.右键项目-》属性-》java bulid path-》jr ... -
空Object转换String的陷阱
2014-06-17 15:45 769Object a=null; String b ... -
Java Convert Long to Date
2014-06-16 18:06 726问题: I have list with long value ... -
[转]JAVA中List&Set转换
2014-06-07 14:23 484JAVA中List&Set转换 list = new ... -
aes加密时的Illegal key size or default parameters
2014-06-06 14:21 3807KeyGenerator kgen = KeyGenerat ... -
String.replaceLast()
2014-06-03 16:02 1049http://stackoverflow.com/questi ... -
通过正则表达式来获取json数值
2014-05-23 11:39 13private String getJsonValue(Str ... -
java找不到或无法加载主类
2014-05-19 13:21 1237用CMD运行java +类名, 居然碰到这个问题。 编译是没有 ... -
Java转义字符笔记 |
2014-01-12 21:01 878数据库有一个关键字列-keyword,里面存放的关键字格式如下 ... -
char和int类型相互转换
2013-12-10 18:43 1317今天看到别人使用一个方法 ->String.indexO ...
相关推荐
【IT十八掌徐培成】Java基础第12天-02.TreeSet实现与Comparable接口.zip
介绍TreeSet集合用法,向TreeSet集合中添加类的对象,此类需实现Comparable接口,有实例,供需要的朋友下载学习。
Java数据结构--13.Java8数据结构TreeSet 前⾔ ,上⼀篇中对 Set 接⼝最终实现类 HashSet 与 LinkedHashSet 做了介绍与分析,本篇将对另⼀种 Set 接⼝的最终实现类 TreeSet 进⾏ 介绍与分析。 先来看下 TreeSet 完整...
发布于2012-5-8TreeSet支持两种排序方法:自然排序和定制排序。TreeSet默认采用自然排序。TreeSet会调用集合元素的compareTo(Objectobj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然...
总结一下: ArrayList:如果是查改多,用ArrayList LinkedList:如果是增删插多,用LinkedList Vector:如果是有线程安全要求用...LinkedHashSet:如果需要元素不重复,并且,有存入和取出顺序要求用LinkedHashSet
Hashtable 的区别,HashSet如何检查重复,HashMap的底层实现,HashMap 多线程操作导致死循环问题,ConcurrentHashMap 和 Hashtable 的区别,ConcurrentHashMap线程安全的具体实现⽅式/底层具体实现,comparable 和 ...
哈希值 LinkedHashSet TreeSet 自然排序Comparable 比较器排序Comparator Set集合 并发修改异常 LinkedList集合 ArrayList集合 List集合 Collection集合概述 冒泡排序 Object 异常 Math 包装类 Calendar类 ...
HashSet 和 TreeSet 有什么区别? HashMap 和 TreeMap 有什么区别? 什么是迭代器?如何使用它来遍历集合? 什么是 fail-fast 机制? 如何使用 Collections 类对集合进行排序? 什么是 Comparable 和 Comparator ...
List接口、ArrayList类、Vector类、栈操作类Stack、链表操作类LinkList、队列操作接口Queue、Set接口、HashSet类、TreeSet类、SortedSet接口 双值操作接口Map(key->value)及其子接口、子类: SortedMap接口、HashMap...
它涉及List,Iterable,Comparable和Comparator接口以及TreeMap,TreeSet,ArrayList,LinkedList和PriorityQueue JCF类。 它还包含类Network(网络)和类BinaryTree,类网络描述了有向网络,BinaryTree描述了...
CollectionDemo ##关于学习 ###多用 Google,少用某度;...TreeSetDemo1.java 讲解 TreeSet 的一些知识和用法实例程序 ##参考资料 ###大部分来自 StackOverFlow Java : Comparable vs Comparator What
实现comparable接口,元素是以二叉树的形式存放的。线程不安全 CopyOnWriteArraySet 标记: class Queue 标记: interface BlockingQueue 标记: interface ArrayBlockingQueue LinkedBlockingQueue ...
HashSet_VS_TreeSet Http_Code Java_ArrayList_Vector Java_Bubble_Sort Java_ClassLoader Java_Copy_On_Write Java_Exception Java_ExecutorService Java_IO Java_JVM_Monitor Java_Jstat Java_Lambda Java_Memory ...
6、输出所有的水仙花数,把谓水仙花数是指一个数3位数,其各各位数字立方和等于其本身, 例如: 153 = 1*1*1 + 3*3*3 + 5*5*5 class DafodilNumber{ public static void main(String[] args){ System.out....