-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMain30.java
More file actions
50 lines (44 loc) · 1.33 KB
/
Main30.java
File metadata and controls
50 lines (44 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package JZOfferTuJi;
import java.util.*;
public class Main30 {
private final Map<Integer, Integer> map;
private final List<Integer> list;
private final Random random;
public Main30() {
map = new HashMap<>();
list = new ArrayList<>();
random = new Random();
}
public boolean insert(int val){
// 快速判断val是否已经存在于集合中
if(map.containsKey(val)){
return false;
}
// 将val保存在map和list中
map.put(val, list.size());
list.add(val);
return true;
}
public boolean remove(int val){
// 判断val是否存在于集合中
int valIndex = map.getOrDefault(val, -1);
if(valIndex == -1){
return false;
}
// list中最后一个元素的下标
int insteadValIndex = list.size() - 1;
if(valIndex != insteadValIndex){
// 将val和list[最后一个元素]的值再list中交换
int insteadVal = list.get(insteadValIndex);
list.set(valIndex, insteadVal);
map.put(insteadVal, valIndex);
}
// 在map和list中取出val
map.remove(val);
list.remove(insteadValIndex);
return true;
}
public int getRandom(){
return list.get(random.nextInt(list.size()));
}
}