java二分法向集合插入数据

虾米姐 阅读:664 2021-04-01 11:16:02 评论:0

1.升序排序,相同数据替换,不同数据插入

public class two { 
	public static void main(String[] args) { 
		List<Integer> asks = new ArrayList<>(); 
		asks.add(3); 
		asks.add(5); 
		asks.add(7); 
		asks.add(9); 
		asks.add(11); 
		List<Integer> search = search(asks,8); 
		for (Integer integer : search) { 
			System.out.println(integer); 
		} 
	} 
 
	public static List<Integer> search(List<Integer> asks, int key) { 
		boolean flag = false; 
		int start = 0; 
		int end = asks.size() - 1; 
		int middle = 0; 
		while (start <= end) { 
			middle = (start + end) / 2; 
			if (key < asks.get(middle)) { 
				end = middle - 1; 
			} else if (key > asks.get(middle)) { 
				start = middle + 1; 
			} else { 
				flag = true; 
				break; 
			} 
		} 
		//集合升序 
		if (key > asks.get(middle)) {//key<asks.get(middle)集合降序 
			middle++; 
		} 
		if (flag) { 
			asks.set(middle, key); 
		} else { 
			asks.add(middle, key); 
		} 
		return asks; 
	} 
} 

2.实战,向一个有序集合插入另一个集合的数据价格相同覆盖,不同插入,对象数量属性为零删除当前对象
模拟股票数据深度列表SpotDepthItem:现货深度对象,字段( quantity:当前价格数量,price:当前价格)

								//原深度集合 
								List<SpotDepthItem> asks = oldSpotDepth.getAsks(); 
								//深度增量 
								List<SpotDepthItem> newAsks = spotDepth.getAsks(); 
								// 卖方深度升序插入 
								if (asks != null && asks.size() > 0) { 
									for (int i = 0; i < newAsks.size(); i++) { 
										SpotDepthItem newAsk = newAsks.get(i); 
										boolean flag = false; 
										double key = newAsk.getPrice().doubleValue(); 
										int start = 0; 
										int end = asks.size() - 1; 
										int middle = 0; 
										while (start <= end) { 
											middle = (start + end) / 2; 
											if (key < asks.get(middle).getPrice().doubleValue()) { 
												end = middle - 1; 
											} else if (key > asks.get(middle).getPrice().doubleValue()) { 
												start = middle + 1; 
											} else { 
												flag = true; 
												break; 
											} 
										} 
										if (key > asks.get(middle).getPrice().doubleValue()) { 
											middle++; 
										} 
										if (newAsk.getQuantity().doubleValue() == 0) { 
											asks.remove(middle); 
										} else { 
											if (flag) { 
												asks.set(middle, newAsk); 
											} else { 
												asks.add(middle, newAsk); 
											} 
										} 
									} 
								} 
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号