java-自定义数据排序

导读:由于基本类型的数据都实现了一个共同的接口java.lang.Comparable接口,都实现了该接口下面的compareTo()方法,因此想要利用面向对象实现现实生活中的一些情景再现,比如新闻根据标题内容,点击量,更新日期等等进行排名。

1.首先新建一个实体类,用于存放数据

 1 package com.etc;
 2 import java.text.DateFormat;
 3 import java.text.ParseException;
 4 import java.text.SimpleDateFormat;
 5 //新闻实体类,里面包含新闻标题,新闻的点击率,以及更新时间
 6 import java.util.Date;
 7 
 8 public class News {
 9     public String title;
10     public int clickNum;
11     public Date date;
12     public News(String title, int clickNum, String date) {
13         super();
14         this.title = title;
15         this.clickNum = clickNum;
16         //将传入的String类型的日期进行转换
17         DateFormat format=new SimpleDateFormat("yyyy-MM");
18         try {
19             this.date = format.parse(date);
20         } catch (ParseException e) {
21             e.printStackTrace();
22         }
23     }
24 
25     public News(String title) {
26         this.title=title;
27     }
28 
29     public String getTitle() {
30         return title;
31     }
32     public void setTitle(String title) {
33         this.title = title;
34     }
35     public int getClickNum() {
36         return clickNum;
37     }
38     public void setClickNum(int clickNum) {
39         this.clickNum = clickNum;
40     }
41     public Date getDate() {
42         return date;
43     }
44     public void setDate(Date date) {
45         this.date = date;
46     }
47 
48 }

2.具体排序类方法实现

  1 package com.etc;
  2 
  3 import java.util.ArrayList;
  4 import java.util.Arrays;
  5 import java.util.Date;
  6 import java.util.List;
  7 
  8 /**
  9  * 自定义实现数据排序
 10  * 例:新闻数据信息排序
 11  * 1.按照点击率Integer排序
 12  * 2.按照标题信息String排序
 13  * 3.可以将时间数组转String数组同样实现类似2的排序
 14  */
 15 public class CustomizeSort {
 16 
 17     public static void main(String[] args) {
 18         SortByclickNum();
 19         SortByTitle();
 20         getDate();
 21     }
 22     //自定义实现根据新闻点击量将新闻标题排序
 23     public static void SortByclickNum() {
 24         //获取数据
 25         List<News> list=setData();
 26         List<Integer> ls=new ArrayList<Integer>();
 27         System.out.println("点击量数据为:");
 28         //将数据放入集合中以便存储
 29         for(int i=0;i<list.size();i++) {
 30             ls.add(list.get(i).clickNum);
 31             System.out.print(ls.get(i)+" "+"
");
 32         }
 33         Integer[] in=new Integer[ls.size()];
 34         for(int j=0;j<ls.size();j++) {
 35             in[j]=ls.get(j);
 36         }
 37         //冒泡排序
 38         BuboSort(in);
 39         //打印结果
 40         System.out.println("冒泡最终结果:"+Arrays.toString(in));
 41 
 42     }
 43 
 44     public static void getDate() {
 45         //获取数据
 46         List<News> list=setData();
 47         List<Date> ls=new ArrayList<Date>();
 48         System.out.println("更新日期数据为:");
 49         for(int i=0;i<list.size();i++) {
 50             ls.add(list.get(i).date);
 51             System.out.print(ls.get(i)+" "+"
");
 52         }
 53     }
 54 
 55     //这里实现将新闻的标题获取,并根据标题名进行排序
 56     private static void SortByTitle() {
 57         //获取数据
 58         List<News> list=setData();
 59         List<String> ls=new ArrayList<String>();
 60         System.out.println("标题名称数据为:");
 61         for(int i=0;i<list.size();i++) {
 62             ls.add(list.get(i).title);
 63             System.out.print(ls.get(i)+" "+"
");
 64         }
 65         String[] str = new String[ls.size()];
 66         for(int j=0;j<ls.size();j++) {
 67             str[j]=ls.get(j);
 68         }
 69         //借助compareTo()方法实现另一种形式的冒泡
 70         for(int m=0;m<str.length;m++) {
 71             for(int n=m;n<str.length;n++) {
 72                 if(str[n].compareTo(str[m])<0) {
 73                     //将较小的值放置于前面
 74                     String temp=null;
 75                     temp=str[m];
 76                     str[m]=str[n];
 77                     str[n]=temp;
 78                 }
 79             }
 80         }
 81         System.out.println("冒泡结果为:"+Arrays.toString(str));
 82     }
 83 
 84     //新闻信息初始化数据输入,以集合的形式存放数据
 85     public static List<News> setData() {
 86         List<News> list=new ArrayList<News>(); 
 87         News N1=new News("新闻A",1000,"2019-04");
 88         News N2=new News("新闻B",1500,"2019-05");
 89         News N3=new News("新闻D",1800,"2019-03");
 90         News N4=new News("新闻F",900,"2019-11");
 91         News N5=new News("新闻C",800,"2019-9");
 92         list.add(N1);
 93         list.add(N2);
 94         list.add(N3);
 95         list.add(N4);
 96         list.add(N5);
 97         return list;
 98 
 99     }
100     //冒泡排序方法实现
101     private static void BuboSort(Integer[] arr) {
102         //由第一个元素开始遍历直到数组长度-1,即最后一个元素,表示冒泡排序的趟数为元素个数减一
103         for(int i=0;i<arr.length-1;i++) {
104             //表示冒泡排序的次数
105             for(int j=0;j<arr.length-i-1;j++) {
106                 int temp = 0;
107                 //将更小的值冒泡至前面
108                 if(arr[j]>arr[j+1]) {
109                     temp=arr[j];
110                     arr[j]=arr[j+1];
111                     arr[j+1]=temp;
112                 }
113             }  
114         }
115     }
116 }

效果截图:

 

ps:文章未完善,正在努力学习改进排序类方法的实现。

原文地址:https://www.cnblogs.com/weekstart/p/10778298.html