您的位置:首页 > 移动开发 > Android开发

Java(android)安卓中的list对象排序

2013-05-21 15:44 555 查看
由于开发百度地图获取到的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> voidsort(List<T>
list,
Comparator<? super T> comparator)
Sorts the specified list using the specified comparator.
static <T extends Comparable<? super T>> voidsort(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> voidsort(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>> voidsort(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 上两张对比图

未整理之前:



整理之后的距离:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: