Java实现距离排序【Collections.sort】

一个简单的按距离排序的例子,算法是 计算两点之间的距离,并将这个距离按照从小到大(即从近到远)排序。运用Collections的sort方法实现按距离排序。


创建一个简单的实体类:

/**
	 * 主键Id
	 */
	private String id;
	/**
	 * 专题编号
	 */
	private String specialId;
	/**
	 * 专题名称
	 */
	private String specialName;
	/**
	 * X坐标
	 */
	private String XCoordinate;
	/**
	 * Y坐标
	 */
	private String YCoordinate;
	/**
	 * 更新时间
	 */
	private Date updateTime;
	/**
	 * 两点之间距离
	 */
	private Double distance;
        其余代码省略,只显示属性

将数据查询出来并封装在list集合之中,然后调用Collections的sort方法进行排序:


specialList = dao.findSpecialList(param);
			if(specialList != null && specialList.size() > 0){
				//遍历集合,并根据已知的坐标求出距离
				for (int i = 0; i < specialList.size(); i++) {
					specialInfo info = new specialInfo();
					info.setId(specialList.get(i).getId());
					info.setLabelId(specialList.get(i).getLabelId());
					info.setSpecialName(specialList.get(i).getSpecialName());
					info.setSpeciaType(specialList.get(i).getSpeciaType());
					info.setSpecialContent(specialList.get(i).getSpecialContent());
					info.setSmallImg(specialList.get(i).getSmallImg());
					info.setXCoordinate(specialList.get(i).getXCoordinate());
					info.setYCoordinate(specialList.get(i).getYCoordinate());
					info.setUpdateTime(specialList.get(i).getUpdateTime());
					//计算两点间的距离并赋给实体中的distance属性,并使用该字段排序
					info.setDistance(getDistance(XCoordinate,YCoordinate,Double.parseDouble(specialList.get(i).getXCoordinate()),Double.parseDouble(specialList.get(i).getYCoordinate())));
					sortList.add(info);
				}
				//使用Distance最为排序字段对集合中的数据进行按距离排序
				Collections.sort(sortList,new Comparator<specialInfo>(){  
	            public int compare(specialInfo info1, specialInfo info2) {  
	                return info1.getDistance().compareTo(info2.getDistance());  
	            }  
	        }); 
}



Java求两点之间距离:

/**
	 * 求两点之间的距离
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @return
	 */
	public static double getDistance(double x1,double y1,double x2,double y2){
		double d = (x2-x1)*(x2-x1) - (y2-y1)*(y2-y1);
		//绝对值
		double number = Math.abs(d);
		return Math.sqrt(number);
	}

运行结果:



可以看出json中的数据已经按照距离由小到大完成排序。


总结:Collections.sort 默认按照从小到大的顺序排序。如果需要按照从大到小的顺序,只需将return info1.getDistance().compareTo(info2.getDistance() 修改为

return info2.getDistance().compareTo(info1.getDistance())即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值