导读:由于基本类型的数据都实现了一个共同的接口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:文章未完善,正在努力学习改进排序类方法的实现。