zoukankan      html  css  js  c++  java
  • 排序算法Java(android)安卓中的list对象排序

    今天一直在学习排序算法之类的问题,上午正好有机会和大家讨论一下.

        由于开发百度舆图获取到的POI信息须要进行由进到远的排序。所以须要些排序算法。

        之前是采取冒泡排序算法

        算法如下:(摘自网络)

    public class MaoPaoSort {
    	public static void main(String[] args) {
    		try {
    			int mp[] = new int[args.length];
    			for (int i = 0; i < args.length; i++) {
    				mp[i] = Integer.parseInt(args[i]);
    			}
    			for (int i = 0; i < mp.length; i++) {
    				for (int j = 0; j < mp.length; j++) {
    					int temp;
    					if (mp[i] < mp[j]) {
    						temp = mp[j];
    						mp[j] = mp[i];
    						mp[i] = temp;
    					}
    				}
    			}
    			for (int i = 0; i < mp.length; i++) {
    				System.out.print(mp[i] + " ");
    			}

        进过搜索发现,本来JAVA工具类已经有排序算法了,遂用之。

     Collections类下的sort方法

        

    static <T> void sort( List<T> list, Comparator<? super T> comparator)
    Sorts the specified list using the specified comparator.
    static <T extends  Comparable<? super T>> void sort( List<T> list)
    Sorts the specified list in ascending natural order.

        两种方法都能实现排序。

        好了,下面是我们须要排序的对象。

        一个用于存放通过百度POI搜索失掉的结果的对象

    package com.android.so.model;
    
    import com.baidu.platform.comapi.basestruct.GeoPoint;
    
    public class PoiInfo {
    	private String name;
    	private String address;
    	private boolean detail;
    	private String uid;
    	private String telephone;
    	private GeoPoint pt;
    	private int distance;
    	private int ePoiType;
    
    	public String getName() {
    		return name;
    	}
    
    	public String getAddress() {
    		return address;
    	}
    
    	public String getUid() {
    		return uid;
    	}
    
    	public String getTelephone() {
    		return telephone;
    	}
    
    	public GeoPoint getPt() {
    		return pt;
    	}
    
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public void setAddress(String address) {
    		this.address = address;
    	}
    
    	public void setUid(String uid) {
    		this.uid = uid;
    	}
    
    	public void setTelephone(String telephone) {
    		this.telephone = telephone;
    	}
    
    	public void setPt(GeoPoint pt) {
    		this.pt = pt;
    	}
    
    	public int getePoiType() {
    		return ePoiType;
    	}
    
    	public void setePoiType(int ePoiType) {
    		this.ePoiType = ePoiType;
    	}
    
    	public boolean isDetail() {
    		return detail;
    	}
    
    	public void setDetail(boolean detail) {
    		this.detail = detail;
    	}
    
    	public int getDistance() {
    		return distance;
    	}
    
    	public void setDistance(int distance) {
    		this.distance = distance;
    	}
    
    
    
    }

        当初我们须要他按照Distance(距离)来进行升序排序。

        这里使用方法:

        每日一道理
    古人云:“海纳百川,有容乃大。”人世间,不可能没有矛盾和争吵,我们要以磊落的胸怀和宽容的微笑去面对它 。哈伯德也曾说过:“宽恕和受宽恕的难以言喻的快乐,是连神明都会为之羡慕的极大乐事。”让我们从宽容中享受快乐,从谅解中体会幸福吧!

        

    static <T> void sort( List<T> list, Comparator<? super T> comparator)
    Sorts the specified list using the specified comparator.

        我们就须要调用方法:

    Collections.sort(poiArrayList, new Comparator<PoiInfo>() {
    
    					@Override
    					public int compare(PoiInfo lhs, PoiInfo rhs) {
    						return lhs.getDistance() - rhs.getDistance();
    					}
    				});

        同理如果须要进行降序排序,只须要更改return的结果,如下:

    Collections.sort(poiArrayList, new Comparator<PoiInfo>() {
    
    					@Override
    					public int compare(PoiInfo lhs, PoiInfo rhs) {
    						return rhs.getDistance() - lhs.getDistance();
    					}
    				});

        ----------------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------------------------------------

        以下是另一种方法

        

    static <T extends  Comparable<? super T>> void sort( List<T> list)
    Sorts the specified list in ascending natural order.

        这种方法须要对象本身实现Comparable<T>接口。

        所以PoiInfo类改为:

    package com.android.so.model;
    
    import com.baidu.platform.comapi.basestruct.GeoPoint;
    
    public class PoiInfo implements Comparable<PoiInfo> {
    	private String name;
    	private String address;
    	private boolean detail;
    	private String uid;
    	private String telephone;
    	private GeoPoint pt;
    	private int distance;
    	private int ePoiType;
    
    	public String getName() {
    		return name;
    	}
    
    	public String getAddress() {
    		return address;
    	}
    
    	public String getUid() {
    		return uid;
    	}
    
    	public String getTelephone() {
    		return telephone;
    	}
    
    	public GeoPoint getPt() {
    		return pt;
    	}
    
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public void setAddress(String address) {
    		this.address = address;
    	}
    
    	public void setUid(String uid) {
    		this.uid = uid;
    	}
    
    	public void setTelephone(String telephone) {
    		this.telephone = telephone;
    	}
    
    	public void setPt(GeoPoint pt) {
    		this.pt = pt;
    	}
    
    	public int getePoiType() {
    		return ePoiType;
    	}
    
    	public void setePoiType(int ePoiType) {
    		this.ePoiType = ePoiType;
    	}
    
    	public boolean isDetail() {
    		return detail;
    	}
    
    	public void setDetail(boolean detail) {
    		this.detail = detail;
    	}
    
    	public int getDistance() {
    		return distance;
    	}
    
    	public void setDistance(int distance) {
    		this.distance = distance;
    	}
    
    	@Override
    	public int compareTo(PoiInfo another) {
    		return getDistance() - another.getDistance();
    	}
    
    
    }

        实现了compareTo方法,以上是升序排序,如果须要降序排序,将return getDistance() - another.getDistance();改为return another.getDistance() - getDistance();即可。

        OK ,那么我们就须要调用代码:

    Collections.sort(poiArrayList);
    来对list进行排序

        OK 上两张对比图

        未整理之前:

        排序和算法

        整理之后的距离:

        排序和算法

        

        

        

    文章结束给大家分享下程序员的一些笑话语录: 那是习惯决定的,一直保持一个习惯是不好的!IE6的用户不习惯多标签,但是最终肯定还是得转到多标签的浏览器。历史(软件UI)的进步(改善)不是以个人意志(习惯)为转移的!

  • 相关阅读:
    Java蛇形数组的简单实现代码
    Android Studio生成javadoc出错的解决办法
    AngularJS指令嵌套时link函数执行顺序的问题
    [转]如果我有jQuery背景,我应该如何切换到AngularJS的思维模式?
    扩展ViewFlow避免和ViewPager滑动冲突,同时支持无限循环,并完美和CircleFlowIndicator结合
    人机交互的新方向:智能聊天机器人
    利用python自动清除Android工程中的多余资源
    巧用svn create patch(打补丁)方案解决定制版需求
    【Android开发坑系列】之经常被忽略的背景图片内存泄露
    【Android开发坑系列】之try-catch
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3091753.html
Copyright © 2011-2022 走看看