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 上兩張對比圖

未整理之前:


整理之後的距離:





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章