java二分法向集合插入数据

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);
											}
										}
									}
								}
发布了47 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_37460672/article/details/103236704