導讀:由於基本類型的數據都實現了一個共同的接口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:文章未完善,正在努力學習改進排序類方法的實現。