当前位置:网站首页>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
边栏推荐
- Introduction to spring trick of ByteDance: senior students, senior students, senior students, and the author "brocade bag"
- 控制转移指令
- 汇编语言寻址方式
- Program counter of JVM runtime data area
- IDEA断点调试技巧,多张动图包教包会。
- Activiti directory (IV) inquiry agency / done, approved
- 学习投资大师的智慧
- Set up the flutter environment pit collection
- Activit零零碎碎要人命的坑
- 算数运算指令
猜你喜欢
随机推荐
Many papers on ByteDance have been selected into CVPR 2021, and the selected dry goods are here
"One year after graduation, I won ACL best paper"
Activiti目录(一)重点介绍
Log4j2 major vulnerabilities and Solutions
【逆向】脱壳后修复IAT并关闭ASLR
8086 CPU internal structure
逻辑运算指令
Wu Jun trilogy insight (IV) everyone's wisdom
Activiti directory (III) deployment process and initiation process
JVM garbage collector part 2
MySQL字符串函数
唯有学C不负众望 TOP1环境配置
JVM garbage collection overview
复盘网鼎杯Re-Signal Writeup
February database ranking: how long can Oracle remain the first?
ByteDance overseas technical team won the championship again: HD video coding has won the first place in 17 items
TCP's three handshakes and four waves
List集合数据移除(List.subList.clear)
arithmetic operation
Basic knowledge of assembly language