Java集合排序方法comparable和comparator
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java集合排序方法comparable和comparator,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5552字,纯文字阅读大概需要8分钟。
内容图文
![Java集合排序方法comparable和comparator](/upload/InfoBanner/zyjiaocheng/849/01d193b9571145a081b70f108bcb2aed.jpg)
java实现排序工具类
package com.bootdo.common.config.collection.test.sort;
import java.util.Comparator;
import java.util.List;
/**
* @ClassName : Utils
* @Description: java sort和list 集合实现排序
* @Author: 13394
* @CreateDate: 2018/10/25 21:16
* @Version: 1.0
*/
public class Utils {
/**
* 数组的排序 (降序)
* @param arr
*/
public static void sort(Object[] 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){
Object temp = arr[i];
arr[i] =arr[i+1];
arr[i+1] =temp;
sorted =false; //假定失败
}
}
if(sorted){ //减少趟数
break;
}
}
}
/**
* 数组排序 (使用泛型方法)
*/
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;
}
}
}
/**
* 数组的排序 (降序)+Comparator接口
* @param arr
*/
public static <T> void sort(Object[] arr, Comparator<T> com ){
boolean sorted=false;
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;
}
}
}
/**
* 容器排序 (使用泛型方法)
*/
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]));
}
}
/**
* List的排序+比较器
* @param list
* @param com
*/
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]));
}
}
}
java.lang.Comparable (重现compareTo方法)
package com.bootdo.common.config.collection.test.sort.yewu;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;
/**
* @ClassName : NewsItem
* @Description: 新闻实体类
* @Author: 13394
* @CreateDate: 2018/10/26 9:24
* @Version: 1.0
*/
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) {
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;
}
//时间降序+点击量+标题降序
@Override
public 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;
}
@Override
public String toString() {
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append("标题:").append(this.title);
stringBuffer.append(",时间:").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.pubTime));
stringBuffer.append("点击量:").append(this.hits).append("\n");
return stringBuffer.toString();
}
}
测试方法
@org.junit.Test
public void test4(){
TreeSet<NewsItem> news=new TreeSet<NewsItem>();
news.add(new NewsItem("中国登上钓鱼岛了,全国欢呼了",100,new Date()));
news.add(new NewsItem("美国后怕了,逃跑了悲剧了",50,new Date(System.currentTimeMillis()-1000*60*60)));
news.add(new NewsItem("小日本终于听话了,泪流满面笑了",60,new Date(System.currentTimeMillis()+1000*60*60)));
for(NewsItem newsItem:news){
//System.out.println("标题:"+newsItem.getTitle()+"点击次数:"+newsItem.getHits()+"时间:"+newsItem.getPubTime());
System.out.println(newsItem.toString());
}
}
java.util.Comparator (重写compare方法)
package com.bootdo.common.config.collection.test.sort.yewu;
/**
* @ClassName : Goods实体类
* @Description: TODO
* @Author: 13394
* @CreateDate: 2018/10/26 9:50
* @Version: 1.0
*/
public class Goods {
private String name; //商品名称
private double price; //商品价格
private int fav; //商品的收藏量
public Goods(){
}
public Goods(String name,double price,int fav){
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;
}
@Override
public String toString() {
return "商品名:"+name+",收藏量"+this.fav+",价格:"+this.price+"\n";
}
}
package com.bootdo.common.config.collection.test.sort.yewu;
/**
* @ClassName : GoodsFavComp
* @Description: 按照收藏量排序的业务类
* @Author: 13394
* @CreateDate: 2018/10/26 9:57
* @Version: 1.0
*/
public class GoodsFavComp implements java.util.Comparator<Goods> {
@Override
public int compare(Goods o1, Goods o2) {
return o1.getFav()-o2.getFav();
}
}
@org.junit.Test
public void test2(){
List<Goods> list =new ArrayList<Goods>();
list.add(new Goods("NADAD",100,3000));
list.add(new Goods("ADADAD",50,2000));
list.add(new Goods("ADADADQEQ",1000,1000));
list.add(new Goods("ADADEQEADQEQ",1000,4000));
System.out.println("排序前:"+list);
Collections.sort(list,new GoodsPriceComp());
Collections.sort(list,new GoodsFavComp());
System.out.println("排序后:"+list);
}
内容总结
以上是互联网集市为您收集整理的Java集合排序方法comparable和comparator全部内容,希望文章能够帮你解决Java集合排序方法comparable和comparator所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。