Java容器Treeset的两种排序方法
2015-11-08 16:42
453 查看
TreeSet支持两种排序方式:自然排序、定制排序
1、自然排序:自然排序下,集合元素必须是实现了Comparable接口的类的对象。
也就是说,在这种排序方式下需要实现Comparable接口。
覆盖此接口中的compareTo(Object obj)方法,定义目标的比较方法
package edu.hnsd1.dao; import java.util.Iterator; import java.util.TreeSet; /** * 上机实验:CPU有型号、单价、主频等属性 * 构造这样的对象添加到Treeset中,并对其进行降序输出。 * @author Blue Jey *自然排序方式 */ public class TreeSetImpl { public static void main(String[] args) { // TODO Auto-generated method stub TreeSet treeset=new TreeSet(); treeset.add(new computer1("联想ThinkPadE431",3333,3)); treeset.add(new computer1("宏基",3000,3)); treeset.add(new computer1("Dell",4000,3)); Iterator itera=treeset.iterator(); while(itera.hasNext()){ System.out.println(itera.next()); } } } class computer1 implements Comparable { private String Type;//电脑的型号 private int Price;//电脑的单价 private int MainFrequency;//电脑的主频/MHZ public computer1(String t1,int t2,int t3){ this.setComputer1(t1, t2, t3); } public void setComputer1(String t1,int t2,int t3){ this.Type=t1; this.Price=t2; this.MainFrequency=t3; } @Override public int compareTo(Object arg0) { // TODO Auto-generated method stub int ret=0; if(!(arg0 instanceof computer1)) throw new RuntimeException("对象不对!"); computer1 temp=(computer1)arg0; if(this.equals(temp)){ System.out.println("HELLO WORD!"); } ret=this.Price-temp.Price; if(ret==0){ ret=this.MainFrequency-temp.MainFrequency; } return -ret; } public String toString(){ return this.Type+" "+this.Price+" "+this.MainFrequency; }</span>
2、定制排序:通过构造方法指定TreeSet的比较器进行排序,实现 int compare(T o1,T o2)的比较方法。
package edu.hnsd1.dao; import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; /** * 上机实验:CPU有型号、单价、主频等属性 构造这样的对象添加到Treeset中,并对其进行降序输出。 * * @author Blue Jey 自然排序方式 */ public class TreeSetImpl { public static void main(String[] args) { // TODO Auto-generated method stub TreeSet treeset = new TreeSet(new newComparator()); treeset.add(new computer2("联想ThinkPadE431", 3333, 3)); treeset.add(new computer2("宏基", 3000, 3)); treeset.add(new computer2("Dell", 4000, 3)); Iterator itera = treeset.iterator(); while (itera.hasNext()) { System.out.println(itera.next()); } } } class computer2 { private String Type;// 电脑的型号 private int Price;// 电脑的单价 private int MainFrequency;// 电脑的主频/MHZ public computer2(String t1, int t2, int t3) { this.setcomputer2(t1, t2, t3); } public void setcomputer2(String t1, int t2, int t3) { this.Type = t1; this.Price = t2; this.MainFrequency = t3; } public int getPrice() { return this.Price; } public int getMF() { return this.MainFrequency; } public String toString() { return this.Type + " " + this.Price + " " + this.MainFrequency; } } class newComparator implements Comparator { @Override public int compare(Object arg0, Object arg1) { int ret = 0; computer2 temp = (computer2) arg0; computer2 temp1 = (computer2) arg1; ret = temp.getPrice() - temp1.getPrice(); if (ret == 0) { ret = temp.getMF() - temp1.getMF(); } return -ret; } }
相关文章推荐
- java后续学习内容
- MyEclipse导入项目,发现项目编码与文件编码不一致的问题解决
- ubuntu java6 install
- java学习日记----------------为窗口添加背景图
- java继承覆盖总结
- struts2中web.xml的路径问题
- 【Java】 变量和编译时类型和运行时类型不同
- Java学习笔记(十)——多态
- SpringMVC+kaptcha实现图形验证码
- C3P0在hibernate和spring配置的不同点
- Java中输出指定格式的数字
- java jni 入门2 - 数值参数与返回值
- java jni 入门1 - 一个简单的从Java程序中调用C函数
- 从JVM的内存管理角度分析Java的GC垃圾回收机制
- Java实现服务器端对多个客户端请求响应
- eff java 16条
- Spring配置
- spring的bean配置文件中p:
- 【Java高级】反射+工厂模式+属性文件的实例应用
- Spring destory-method