当前位置:网站首页>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
边栏推荐
猜你喜欢
February database ranking: how long can Oracle remain the first?
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
Flink 解析(四):恢复机制
8086 CPU 内部结构
koa中间件
Flink 解析(三):内存管理
Wu Jun's trilogy insight (V) refusing fake workers
复盘网鼎杯Re-Signal Writeup
8086 CPU internal structure
吴军三部曲见识(七) 商业的本质
随机推荐
In the command mode in the VI editor, delete the character usage at the current cursor__ Command.
字节跳动春招攻略:学长学姐笔经面经,还有出题人「锦囊」
【逆向初级】独树一帜
Typescript basic operations
Activiti directory (III) deployment process and initiation process
汇编课后作业
Control transfer instruction
Akamai浅谈风控原理与解决方案
MySQL日期函数
8086 memory
面试集锦库
Interpretation of Flink source code (III): Interpretation of executiongraph source code
【逆向】脱壳后修复IAT并关闭ASLR
Design of DS18B20 digital thermometer system
在 vi 编辑器中的命令模式下,删除当前光标处的字符使用 __ 命 令。
8086 segmentation technology
吴军三部曲见识(七) 商业的本质
TCP's three handshakes and four waves
arithmetic operation
登陆验证koa-passport中间件的简单使用