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)+" "+"\n");
 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)+" "+"\n");
 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)+" "+"\n");
 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:文章未完善,正在努力學習改進排序類方法的實現。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM