JAva二分法による集合へのデータの挿入
2385 ワード
1.昇順ソート、同一データ置換、異なるデータ挿入
2.実戦では、1つの順序付き集合に別の集合を挿入するデータ価格は同じで上書きされ、異なる挿入では、オブジェクト数属性はゼロ現在のオブジェクトシミュレーション株式データ深さリストSpotDepth:現物深さオブジェクト、フィールド(quantity:現在の価格数量、price:現在の価格)を削除します.
public class two {
public static void main(String[] args) {
List asks = new ArrayList<>();
asks.add(3);
asks.add(5);
asks.add(7);
asks.add(9);
asks.add(11);
List search = search(asks,8);
for (Integer integer : search) {
System.out.println(integer);
}
}
public static List search(List 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
2.実戦では、1つの順序付き集合に別の集合を挿入するデータ価格は同じで上書きされ、異なる挿入では、オブジェクト数属性はゼロ現在のオブジェクトシミュレーション株式データ深さリストSpotDepth:現物深さオブジェクト、フィールド(quantity:現在の価格数量、price:現在の価格)を削除します.
//
List asks = oldSpotDepth.getAsks();
//
List 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);
}
}
}
}