d
=
∣
A
x
0
B
y
0
C
∣
A
2
B
2
d= \frac{|Ax_{0}+By_{0}+C|}{ \sqrt{A{2}+B{2}}}
d=A2+B2
∣Ax0+By0+C∣ 坐标点较多时,每个点都要计算 A、B、C 三个参数并求解 d 将消耗不少时间。【耗时】
2. 得到分割点后,递归调用起止点计算标记删除点方法,可能出现栈溢出。【问题】
3. thresholdVal 值越小保留细节将越多,分割点会呈现指数级增长,耗时会增加,需要找到合理值。【耗时+问题】
4. 返回对象包含字段不统一,抽稀算法无法接收不同类型参数。【问题】
2.优化
1️⃣ 个算法使用的封装类和 1️⃣ 个业务使用封装类用于举例
【为了简洁注解未使用DOC规范】:
// 类1 坐标数据封装
@Data
public class PointData {
// 标记是否删除(0保留 1删除)
private int isDelete;
// 数据点的 index 用于优化运算速度(核心优化点)
private int indexEx;
// 数据点的经度
private double longitudeEx;
// 数据点的纬度
private double latitudeEx;
}
// 类2 业务查询返回的数据封装【主要是实现了 PointData 类】具体字段不再贴出
@Data
public class Mobile2g extends PointData implements Serializable {
}
线程池
不做过多介绍:
public class ThreadAllBaseStation {
private static int corePoolSize = Runtime.getRuntime().availableProcessors();
private static ThreadFactory namedFactory = new ThreadFactoryBuilder().setNameFormat("XXX数据查询线程-%d").build();
/\*\*
\* corePoolSize用于指定核心线程数量
\* maximumPoolSize指定最大线程数
\* keepAliveTime和TimeUnit指定线程空闲后的最大存活时间
\*/
public static ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, corePoolSize +