Java比较器的应用
来源:互联网 发布:删除rom内置软件 编辑:程序博客网 时间:2024/04/30 23:11
Java中进行比较的时候分为两种,一种是比较Java内置的数据类型,另一种是自定义数据类型之间的比较,下面就这两个方面进行介绍一下。
一、Java内置数据类型的比较
Java中的容器包括数组和集合两部分,下面从数组和集合两种容器来介绍Java内置数据类型的比较。首先是数组的比较,需要传入的参数是以个存放任意一个对象的数组arr和一个比较器的对象com,首先假定数组有序,然后利用for循环进行比较,利用com的compare方法进行比较,每进行一次比较就把sorted设为false,如果数组有序则直接跳出循环。
<span style="font-size:18px;">public static <T> void sort(Object[] arr,Comparator<T> com){//从大到小排序 降序boolean sorted= true;int len =arr.length;for(int j=0;j<len-1;j++){ //趟数sorted =true; //假定有序for(int i=0;i<len-1-j;i++){ //次数if(com.compare((T)arr[i], (T)arr[i+1])<0){Object temp = arr[i];arr[i] =arr[i+1];arr[i+1] =temp;sorted =false; //假定失败}}if(sorted){ //减少趟数break;}}}</span>然后是集合的比较,集合的比较比较简单,可以先将集合转换为数组,然后利用上面的排序算法进行排序,排序结束后再一一改变集合中的值
<span style="font-size:18px;">public static <T> void sort(List<T> list,Comparator<T> com){//第一步:转成数组Object[] arr =list.toArray();sort(arr,com);//第二步:改变容器中对应的值for(int i=0;i<arr.length;i++){list.set(i, (T)(arr[i]));}}</span>当使用泛型之后,就不必手工传入Comparator对象即
<span style="font-size:18px;">/** * 容器排序 (使用泛型方法) */public static <T extends Comparable<T>> void sort(List<T> list){//第一步:转成数组Object[] arr =list.toArray();sort(arr);//第二步:改变容器中对应的值for(int i=0;i<arr.length;i++){list.set(i, (T)(arr[i]));}}/** * 数组排序 (使用泛型方法) */public static <T extends Comparable<T>> void sort(T[] arr){//从大到小排序 降序boolean sorted= true;int len =arr.length;for(int j=0;j<len-1;j++){ //趟数sorted =true; //假定有序for(int i=0;i<len-1-j;i++){ //次数if(((Comparable)arr[i]).compareTo(arr[i+1])<0){T temp = arr[i];arr[i] =arr[i+1];arr[i+1] =temp;sorted =false; //假定失败}}if(sorted){ //减少趟数break;}}}</span>
二、自定义类型的比较
对于自定义类型的数据进行比较有两种方式,一种是实体类不动,业务类实现comparator接口并重写compare方法,第二种是实体类实现Comparable接口并重写compareto方法,第一种可以实现与实体类的分离,可以应对多变的排序规则
第一种方案,实体类不动业务类实现comparator接口并重写compare
实体类
public class Goods {//商品名称private String name;//价格private double price;//收藏量private int fav;public Goods() {// TODO Auto-generated constructor stub}public Goods(String name, double price, int fav) {super();this.name = name;this.price = price;this.fav = fav;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getFav() {return fav;}public void setFav(int fav) {this.fav = fav;}@Overridepublic String toString() {return "商品名:"+name+",收藏量"+this.fav+",价格:"+this.price+"\n";}}按价格排序的业务类(降序)
<span style="font-size:18px;">public class GoodsPriceComp implements java.util.Comparator<Goods> {@Overridepublic int compare(Goods o1, Goods o2) {return -(o1.getPrice()-o2.getPrice()>0?1:(o1.getPrice()==o2.getPrice()?0:-1));}}package com.bjsxt.sort.refType;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class GoodsApp {/** * @param args */public static void main(String[] args) {List<Goods> list =new ArrayList<Goods>();list.add(new Goods("老马视频",100,2000));list.add(new Goods("老高视频",50,2000));list.add(new Goods("老裴视频",1000,1000));System.out.println("排序前:"+list);//Collections.sort(list,new GoodsPriceComp());Collections.sort(list,new GoodsFavComp());System.out.println("排序后:"+list);}}</span>
第二种实体类实现Comparable接口并重写compareTo方法
新闻条目实体类
public class NewsItem implements java.lang.Comparable<NewsItem>{//标题private String title;//点击量private int hits;//时间private Date pubTime;public NewsItem() {}public NewsItem(String title, int hits, Date pubTime) {super();this.title = title;this.hits = hits;this.pubTime = pubTime;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public int getHits() {return hits;}public void setHits(int hits) {this.hits = hits;}public Date getPubTime() {return pubTime;}public void setPubTime(Date pubTime) {this.pubTime = pubTime;}//时间降序 +点击量升序+标题降序@Overridepublic int compareTo(NewsItem o) {int result =0;//比较 时间result =-this.pubTime.compareTo(o.pubTime); //降序if(0==result){ //时间相同//点击量 result =this.hits-o.hits; //升序if(0==result){ //点击量相同 //标题result=-this.title.compareTo(o.title);//降序}}return result;}@Overridepublic String toString() {StringBuilder sb =new StringBuilder();sb.append("标题:").append(this.title);sb.append(",时间:").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.pubTime));sb.append(",点击量:").append(this.hits).append("\n");return sb.toString();}}
到此,Java中的比较方法就介绍完了,谢谢大家的阅读!
0 0
- Java比较器的应用
- java应用服务器的比较
- Fusion web 应用与Java EE web应用的比较
- java 数组比较,元素的比较,Comparable,Comparator比较的应用实现,排序,查找示例
- 比较器的简单介绍及应用
- 比较器的简单应用(Comparable接口)
- java比较器Comparable接口和Comparator接口的区别及应用
- 重修大学JAVA课--应用类型比较器的实现方法
- 重修大学JAVA课--应用类型比较器的实现方法:完善版
- Java企业应用系统框架的比较与选择
- Java企业应用系统框架的比较与选择
- Java企业应用系统框架的比较与选择
- JBoss,Geronimo还是Tomcat?三种开源Java应用服务器的比较
- 黑马程序员--java基本数据类型的比较和应用
- 《Java中Lock和synchronized的比较和应用》
- Java中TreeMap和HashMap的应用和比较
- java 比较器的使用
- java比较器的使用
- Opencv 特征点检测 整理(Harris,FAST,SIFT , SURF等总结)
- Android Demo 下拉刷新+加载更多+滑动删除
- html自制评论功能模块
- 线程核心概念
- 简单邮件传送协议SMTP
- Java比较器的应用
- poj1753
- Houdini bake particle instance otl工具介绍
- R语言数据挖掘
- NandFlash概念
- Android异常总结---type Status report message HTTP method GET is not supported by this URL
- 黑马程序员——Java基础——正则
- Scala学习(一)---入门基础知识
- 性能测试准备——计算pacing值