当前位置:网站首页>List set data removal (list.sublist.clear)
List set data removal (list.sublist.clear)
2022-07-06 17:18:00 【Xiaobai said (๑• ๑)】
List Set data removal (List.subList.clear)
I have encountered such a problem these two days : A set of data is passed in as a parameter , Now? piecewise
Use the data of this set , The used data needs to be removed from this set , It is convenient to obtain the data of the second paragraph .
hypothesis : The data length of a set is 11 individual , Now use this set in two paragraphs , The first paragraph uses 5 Data , Use of the second paragraph 6 Data , Achieve segmented use of set data . In order to get the data correctly , After obtaining the first data , Take the first five data from list Remove... From collection , Then get the second data , This also facilitates circulation .
At first I did this remove()
, Remove data :
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("g");
list.add("k");
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("g");
list.add("h");
list.add("i");
// Simulate to get the first five numbers in the first paragraph
List<String> oneList = new ArrayList<>();
for (int i = 0; i < 5; i++) {
oneList.add(list.get(i));
list.remove(i);
}
// After the simulation obtains the second paragraph 6 Number
List<String> twoList = new ArrayList<>();
for (int i = 0; i < 6; i++) {
twoList.add(list.get(i));
list.remove(i);
}
}
because ArrayList It's not thread safe , It is obviously not appropriate to do this in the cycle , Problems are likely to occur in concurrency .
So I changed another way ,removeAll()
, remove List Data in :
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("g");
list.add("k");
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("a");
list.add("a");
list.add("a");
// Simulate to get the first five numbers in the first paragraph
List<String> oneList = new ArrayList<>();
for (int i = 0; i < 5; i++) {
oneList.add(list.get(i));
}
list.removeAll(oneList);
// After the simulation obtains the second paragraph 6 Number
List<String> twoList = new ArrayList<>();
for (int i = 0; i < 6; i++) {
twoList.add(list.get(i));
}
list.removeAll(twoList);
}
Notice that the data in the set has changed , This is also the change I found later :
list Originally 11 Data , Take out 5 After that, there should be still 6 Data , however removeAll After that, there is still 3 Data , This must be wrong , Because this will make the array subscript out of bounds exception when obtaining the second segment of data .
Later, I found out by looking at the source code ,removeAll The same elements are removed .
Looking up the data, we found that using iterators will not remove duplicate elements , But the iterator is not the way I want to remove data , It can't achieve the effect I want .
Finally, we found that using subList()
It is reliable to get a subset of the current set to remove , And there are no above two problems .
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("g");
list.add("k");
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("a");
list.add("a");
list.add("a");
// Simulate to get the first five numbers in the first paragraph
List<String> oneList = new ArrayList<>();
for (int i = 0; i < 5; i++) {
oneList.add(list.get(i));
}
// Get subset clear data
List<String> subList_1 = list.subList(0, 5);
subList_1.clear();
// After the simulation obtains the second paragraph 6 Number
List<String> twoList = new ArrayList<>();
for (int i = 0; i < 6; i++) {
twoList.add(list.get(i));
}
list.subList(0, 6).clear();
}
At the end of the article, I want to explain subList Actions and parameters :
subList Is the method to get a subset of the current set
Parameters fromIndex: Specify the starting point of the new list ( Include this point )
Parameters toIndex: Specify the end point of the new list ( This point is not included )
Personally, it means subscript fromIndex Start taking value , take toIndex It's worth .
Refer to the connection
边栏推荐
猜你喜欢
Train 100 pictures for 1 hour, and the style of the photos changes at will. There is a demo at the end of the article | siggraph 2021
Data transfer instruction
案例:检查空字段【注解+反射+自定义异常】
汇编课后作业
服务器端渲染(SSR)和客户端渲染(CSR)的区别
Flink源码解读(二):JobGraph源码解读
The daemon thread starts redis and modifies the configuration file
字节跳动海外技术团队再夺冠:高清视频编码已获17项第一
Instructions for Redux
Assembly language addressing mode
随机推荐
8086 分段技术
Eight part essay that everyone likes
【逆向中级】跃跃欲试
Koa Middleware
Idea resolving jar package conflicts
DOS function call
JVM garbage collector part 2
SQL调优小记
Train 100 pictures for 1 hour, and the style of the photos changes at will. There is a demo at the end of the article | siggraph 2021
【逆向初级】独树一帜
MySQL string function
吴军三部曲见识(四) 大家智慧
吴军三部曲见识(五) 拒绝伪工作者
JVM 垃圾回收器之Serial SerialOld ParNew
Mongodb在node中的使用
Only learning C can live up to expectations top2 P1 variable
"One year after graduation, I won ACL best paper"
Flink 解析(二):反压机制解析
MySQL数字函数
Conception du système de thermomètre numérique DS18B20