由於開發百度地圖獲取到的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 上兩張對比圖
未整理之前:
整理之後的距離: