List集合数据太多进行分批,List的subList方法应用

 List<String> mStrings=new ArrayList<>();
//初始化
for (int i = 0; i < 1020; i++) {
mStrings.add(String.valueOf(i));
} List<List<String>> newStrings = new ArrayList<>();
if (mStrings.size() > 100) {
if (mStrings.size() % 100 > 0) {
for (int i = 0; i < mStrings.size() / 100 + 1; i++) {
if (i == mStrings.size() / 100) {
List<String> newstr = new ArrayList<>();
newstr.addAll(mStrings.subList(100 * i, (mStrings.size() - 1)));
newStrings.add(newstr);
newstr.clear();
} else {
List<String> newstr = new ArrayList<>();
newstr.addAll(mStrings.subList(100 * i, 100 * (i + 1)));
newStrings.add(newstr);
newstr.clear();
}
}
} else {
for (int i = 0; i < mStrings.size() / 100 + 1; i++) {
List<String> newstr = new ArrayList<>();
newstr.addAll(mStrings.subList(100 * i, 100 * (i + 1)));
newStrings.add(newstr);
}
}
}

把 mStrings集合分为100个元素一组,主要使用了List的subList方法,但在使用过程中有一个坑,如果把代码中的newstr.addAll变为newstr=来为newstr赋值的话,虽不会对最后结果产生影响,但,一开始初始化数据的mStrings却被清空了,原因是newstr=(mStrings.subList(100 * i, (mStrings.size() - 1)));中的subList方法与=号使数据源指向的是同一个集合数据,清除后mStrings的数据也被清除。

有兴趣的可以把下面的java代码跑一下

test.java

import java.util.*;
public class test{
public static void main(String args[]){
List<String> mStrings=new ArrayList<>();
List<String> newStrings = new ArrayList<>();
init(mStrings);
newStrings=(mStrings.subList(0,mStrings.size()));
newStrings.clear();
System.out.println(mStrings.size()); } public static void init(List<String> mStrings){
for (int i = 0; i < 1020; i++) {
mStrings.add(String.valueOf(i));
} }
}
上一篇:玩转UICollectionViewLayout


下一篇:HDU-4255 BFS 最短路