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)); } } }