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

来源:互联网 发布:双11外贸大数据 编辑:程序博客网 时间:2024/05/16 04:36

由于开发百度地图获取到的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>() {@Overridepublic int compare(PoiInfo lhs, PoiInfo rhs) {return lhs.getDistance() - rhs.getDistance();}});
同理如果需要进行降序排序,只需要更改return的结果,如下:

Collections.sort(poiArrayList, new Comparator<PoiInfo>() {@Overridepublic 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;}@Overridepublic int compareTo(PoiInfo another) {return getDistance() - another.getDistance();}}

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

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

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

OK 上两张对比图

未整理之前:


整理之后的距离: