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.作者投稿可能会经我们编辑修改或补充。