List集合数据太多进行分批,List的subList方法应用
1 List<String> mStrings=new ArrayList<>(); 2 //初始化 3 for (int i = 0; i < 1020; i++) { 4 mStrings.add(String.valueOf(i)); 5 } 6 7 List<List<String>> 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<String> newstr = new ArrayList<>(); 13 newstr.addAll(mStrings.subList(100 * i, (mStrings.size() - 1))); 14 newStrings.add(newstr); 15 newstr.clear(); 16 } else { 17 List<String> 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<String> 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<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)); } } }