1 List mStrings=new ArrayList<>();2 //初始化
3 for (int i = 0; i < 1020; i++) {4 mStrings.add(String.valueOf(i));5 }6
7 List> newStrings = new ArrayList<>();8 if (mStrings.size() > 100) {9 if (mStrings.size() % 100 > 0) {10 for (int i = 0; i < mStrings.size() / 100 + 1; i++) {11 if (i == mStrings.size() / 100) {12 List newstr = new ArrayList<>();13 newstr.addAll(mStrings.subList(100 * i, (mStrings.size() - 1)));14 newStrings.add(newstr);15 newstr.clear();16 } else{17 List newstr = new ArrayList<>();18 newstr.addAll(mStrings.subList(100 * i, 100 * (i + 1)));19 newStrings.add(newstr);20 newstr.clear();21 }22 }23 } else{24 for (int i = 0; i < mStrings.size() / 100 + 1; i++) {25 List newstr = new ArrayList<>();26 newstr.addAll(mStrings.subList(100 * i, 100 * (i + 1)));27 newStrings.add(newstr);28 }29 }30 }
把 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 mStrings=new ArrayList<>();
List newStrings = new ArrayList<>();
init(mStrings);
newStrings=(mStrings.subList(0,mStrings.size()));
newStrings.clear();
System.out.println(mStrings.size());
}
public static void init(List mStrings){
for (int i = 0; i < 1020; i++) {
mStrings.add(String.valueOf(i));
}
}
}