專案經驗,如需轉載,請註明作者:Yuloran (t.cn/EGU6c76)
前言
筆者之前做專案的時候,寫過一個小演算法,用來實現兩張表的資料同步。因為移動端的資料量一般也就幾千條,所以便沒有關注效能問題。最近開始面試,由於沒做過效能測試,只能根據經驗判斷,想了想還是靠資料說話比較好。
演算法
集合 A 是新集合,集合 B 是老集合,現需要篩選出集合 A 中的新增元素、已更新元素以及集合 B 中的已刪除元素。演算法如上圖所示:
- 使用 sql 語句按 id 升序分別讀取兩張表的記錄並儲存至集合 A 和集合 B 中(id 為自增長的 int 型別)
- 分別從集合 A 和集合 B 中取出一個元素 a 和 b,比較其 id:
- 若 a 的 id 小於 b 的 id,說明 a 是新增元素,將 a 新增到新增元素集合中,然後從集合 A 中刪除 a 同時 i–,這樣下一次迴圈時,便可以取 a 的下一個元素與 b 再次進行比較
- 若 a 的 id 大於 b 的 id,說明 b 是已刪除元素,將 b 新增到已刪除元素集合中,然後從集合 B 中刪除 b 同時 i–,這樣下一次迴圈時,便可以取 b 的下一個元素與 a 再次進行比較
- 若 a 的 id 等於 b 的 id,則進一步判斷 a.equals(b),若為 false,說明 a 是已更新元素,將 a 新增到已更新元素集合,然後繼續下一次迴圈
- 因為迴圈比較的次數為 Math.max(A.size(), B.size()),所以當分別從集合 A 和集合 B 中取出一個元素 a 和 b 時,可能 a 為 null 或者 b 為 null,但不可能 a 和 b 都為 null:
- 若 a 為 null,說明集合A 已經遍歷結束,b 為已刪除元素,將 b 新增到已刪除元素集合,然後進行下一次迴圈
- 若 b 為 null,說明集合B 已經遍歷結束,a 為新增元素,將 a 新增到新增元素集合,然後進行下一次迴圈
程式碼實現
/* * Copyright (C) 2018 Yuloran(https://github.com/Yuloran) * * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.yuloran.wanandroid_java.ui;
import com.yuloran.lib_core.utils.Logger;
import java.util.ArrayList;
import java.util.List;
/** * [集合比較工具] * <
p>
* Author: Yuloran * Date Added: 2019/1/14 19:45 * * @since 1.0.0 */public final class DiffUtil{
private static final String TAG = "DiffUtil";
private DiffUtil() {
} private static class Bean {
int id;
String name;
private Bean(int id, String name) {
this.id = id;
this.name = name;
} @Override public boolean equals(Object o) {
if (this == o) {
return true;
} if (o == null || getClass() != o.getClass()) {
return false;
} Bean bean = (Bean) o;
if (id != bean.id) {
return false;
} return name.equals(bean.name);
} @Override public int hashCode() {
int result = id;
result = 31 * result + name.hashCode();
return result;
} @Override public String toString() {
return "Bean{" + "name='" + name + '\'' + '
}';
}
} public static void calculateDiff() {
List<
Bean>
originalList = generateOriginalList();
List<
Bean>
latestList = generateLatestList();
List<
Bean>
added = new ArrayList<
>
();
List<
Bean>
deleted = new ArrayList<
>
();
List<
Bean>
updated = new ArrayList<
>
();
long timestamp = System.currentTimeMillis();
for (int i = 0;
i <
Math.max(originalList.size(), latestList.size());
i++) {
Bean original = getSafely(i, originalList);
Bean latest = getSafely(i, latestList);
if (original == null) {
added.add(latest);
continue;
} if (latest == null) {
deleted.add(original);
continue;
} if (latest.id >
original.id) {
deleted.add(original);
originalList.remove(i);
i--;
} else if (latest.id <
original.id) {
added.add(latest);
latestList.remove(i);
i--;
} else {
if (!latest.equals(original)) {
updated.add(latest);
}
}
} Logger.debug(TAG, "calculateDiff cost %dms.", (System.currentTimeMillis() - timestamp));
Logger.debug(TAG, "added: %s", added);
Logger.debug(TAG, "deleted: %s", deleted);
Logger.debug(TAG, "updated: %s", updated);
} private static List<
Bean>
generateOriginalList() {
List<
Bean>
originalList = new ArrayList<
>
();
for (int i = 0;
i <
10000;
i++) {
originalList.add(new Bean(i, "bean_" + String.valueOf(i)));
} return originalList;
} private static List<
Bean>
generateLatestList() {
List<
Bean>
latestList = new ArrayList<
>
();
for (int i = 0;
i <
10500;
i++) {
if (i <
1000) {
if (i % 2 == 0) {
continue;
}
} if (i >
1000 &
&
i <
2000) {
if (i % 3 == 0) {
latestList.add(new Bean(i, "multiple_of_3_bean_" + String.valueOf(i)));
continue;
}
} latestList.add(new Bean(i, "bean_" + String.valueOf(i)));
} return latestList;
} private static Bean getSafely(int i, List<
Bean>
list) {
if (i >
= 0 &
&
i <
list.size()) {
return list.get(i);
} return null;
}
}複製程式碼
以上程式碼片段只是示例,專案中需要使用請自行優化程式碼結構。
效能測試
顯然,上述所示演算法的漸進時間複雜度為 O(n),其中最大的問題就是 ArrayList 的 remove 操作,這會導致後續元素需要挨個向前拷貝一次。使用 LinkedList 可以避免元素的拷貝,但是是否可以降低演算法執行時間呢?筆者做了個測試:
- 使用 ArrayList:
2019-01-14 22:15:55.972 3050-3050/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: calculateDiff cost 23ms.2019-01-14 22:15:55.973 3050-3050/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: added: [Bean{name='bean_10000'
}, Bean{name='bean_10001'
}, Bean{name='bean_10002'
}, Bean{name='bean_10003'
}, Bean{name='bean_10004'
}, Bean{name='bean_10005'
}, Bean{name='bean_10006'
}, Bean{name='bean_10007'
}, Bean{name='bean_10008'
}, Bean{name='bean_10009'
}, Bean{name='bean_10010'
}, Bean{name='bean_10011'
}, Bean{name='bean_10012'
}, Bean{name='bean_10013'
}, Bean{name='bean_10014'
}, Bean{name='bean_10015'
}, Bean{name='bean_10016'
}, Bean{name='bean_10017'
}, Bean{name='bean_10018'
}, Bean{name='bean_10019'
}, Bean{name='bean_10020'
}, Bean{name='bean_10021'
}, Bean{name='bean_10022'
}, Bean{name='bean_10023'
}, Bean{name='bean_10024'
}, Bean{name='bean_10025'
}, Bean{name='bean_10026'
}, Bean{name='bean_10027'
}, Bean{name='bean_10028'
}, Bean{name='bean_10029'
}, Bean{name='bean_10030'
}, Bean{name='bean_10031'
}, Bean{name='bean_10032'
}, Bean{name='bean_10033'
}, Bean{name='bean_10034'
}, Bean{name='bean_10035'
}, Bean{name='bean_10036'
}, Bean{name='bean_10037'
}, Bean{name='bean_10038'
}, Bean{name='bean_10039'
}, Bean{name='bean_10040'
}, Bean{name='bean_10041'
}, Bean{name='bean_10042'
}, Bean{name='bean_10043'
}, Bean{name='bean_10044'
}, Bean{name='bean_10045'
}, Bean{name='bean_10046'
}, Bean{name='bean_10047'
}, Bean{name='bean_10048'
}, Bean{name='bean_10049'
}, Bean{name='bean_10050'
}, Bean{name='bean_10051'
}, Bean{name='bean_10052'
}, Bean{name='bean_10053'
}, Bean{name='bean_10054'
}, Bean{name='bean_10055'
}, Bean{name='bean_10056'
}, Bean{name='bean_10057'
}, Bean{name='bean_10058'
}, Bean{name='bean_10059'
}, Bean{name='bean_10060'
}, Bean{name='bean_10061'
}, Bean{name='bean_10062'
}, Bean{name='bean_10063'
}, Bean{name='bean_10064'
}, Bean{name='bean_10065'
}, Bean{name='bean_10066'
}, Bean{name='bean_10067'
}, Bean{name='bean_10068'
}, Bean{name='bean_10069'
}, Bean{name='bean_10070'
}, Bean{name='bean_10071'
}, Bean{name='bean_10072'
}, Bean{name='bean_10073'
}, Bean{name='bean_10074'
}, Bean{name='bean_10075'
}, Bean{name='bean_10076'
}, Bean{name='bean_10077'
}, Bean{name='bean_10078'
}, Bean{name='bean_10079'
}, Bean{name='bean_10080'
}, Bean{name='bean_10081'
}, Bean{name='bean_10082'
}, Bean{name='bean_10083'
}, Bean{name='bean_10084'
}, Bean{name='bean_10085'
}, Bean{name='bean_10086'
}, Bean{name='bean_10087'
}, Bean{name='bean_10088'
}, Bean{name='bean_10089'
}, Bean{name='bean_10090'
}, Bean{name='bean_10091'
}, Bean{name='bean_10092'
}, Bean{name='bean_10093'
}, Bean{name='bean_10094'
}, Bean{name='bean_10095'
}, Bean{name='bean_10096'
}, Bean{name='bean_10097'
}, Bean{name='bean_10098'
}, Bean{name='bean_10099'
}, Bean{name='bean_10100'
}, Bean{name='bean_10101'
}, Bean{name='bean_10102'
}, Bean{name='bean_10103'
}, Bean{name='bean_10104'
}, Bean{name='bean_10105'
}, Bean{name='bean_10106'
}, Bean{name='bean_10107'
}, Bean{name='bean_10108'
}, Bean{name='bean_10109'
}, Bean{name='bean_10110'
}, Bean{name='bean_10111'
}, Bean{name='bean_10112'
}, Bean{name='bean_10113'
}, Bean{name='bean_10114'
}, Bean{name='bean_10115'
}, Bean{name='bean_10116'
}, Bean{name='bean_10117'
}, Bean{name='bean_10118'
}, Bean{name='bean_10119'
}, Bean{name='bean_10120'
}, Bean{name='bean_10121'
}, Bean{name='bean_10122'
}, Bean{name='bean_10123'
}, Bean{name='bean_10124'
}, Bean{name='bean_10125'
}, Bean{name='bean_10126'
}, Bean{name='bean_10127'
}, Bean{name='bean_10128'
}, Bean{name='bean_10129'
}, Bean{name='bean_10130'
}, Bean{name='bean_10131'
}, Bean{name='bean_10132'
}, Bean{name='bean_10133'
}, Bean{name='bean_10134'
}, Bean{name='bean_10135'
}, Bean{name='bean_10136'
}, Bean{name='bean_10137'
}, Bean{name='bean_10138'
}, Bean{name='bean_10139'
}, Bean{name='bean_10140'
}, Bean{name='bean_10141'
}, Bean{name='bean_10142'
}, Bean{name='bean_10143'
}, Bean{name='bean_10144'
}, Bean{name='bean_10145'
}, Bean{name='bean_10146'
}, Bean{name='bean_10147'
}, Bean{name='bean_10148'
}, Bean{name='bean_10149'
}, Bean{name='bean_10150'
}, Bean{name='bean_10151'
}, Bean{name='bean_10152'
}, Bean{name='bean_10153'
}, Bean{name='bean_10154'
}, Bean{name='bean_10155'
}, Bean{name='bean_10156'
}, Bean{name='bean_10157'
}, Bean{name='bean_10158'
}, Bean{name='bean_10159'
}, Bean{name='bean_10160'
}, Bean{name='b2019-01-14 22:15:55.974 3050-3050/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: deleted: [Bean{name='bean_0'
}, Bean{name='bean_2'
}, Bean{name='bean_4'
}, Bean{name='bean_6'
}, Bean{name='bean_8'
}, Bean{name='bean_10'
}, Bean{name='bean_12'
}, Bean{name='bean_14'
}, Bean{name='bean_16'
}, Bean{name='bean_18'
}, Bean{name='bean_20'
}, Bean{name='bean_22'
}, Bean{name='bean_24'
}, Bean{name='bean_26'
}, Bean{name='bean_28'
}, Bean{name='bean_30'
}, Bean{name='bean_32'
}, Bean{name='bean_34'
}, Bean{name='bean_36'
}, Bean{name='bean_38'
}, Bean{name='bean_40'
}, Bean{name='bean_42'
}, Bean{name='bean_44'
}, Bean{name='bean_46'
}, Bean{name='bean_48'
}, Bean{name='bean_50'
}, Bean{name='bean_52'
}, Bean{name='bean_54'
}, Bean{name='bean_56'
}, Bean{name='bean_58'
}, Bean{name='bean_60'
}, Bean{name='bean_62'
}, Bean{name='bean_64'
}, Bean{name='bean_66'
}, Bean{name='bean_68'
}, Bean{name='bean_70'
}, Bean{name='bean_72'
}, Bean{name='bean_74'
}, Bean{name='bean_76'
}, Bean{name='bean_78'
}, Bean{name='bean_80'
}, Bean{name='bean_82'
}, Bean{name='bean_84'
}, Bean{name='bean_86'
}, Bean{name='bean_88'
}, Bean{name='bean_90'
}, Bean{name='bean_92'
}, Bean{name='bean_94'
}, Bean{name='bean_96'
}, Bean{name='bean_98'
}, Bean{name='bean_100'
}, Bean{name='bean_102'
}, Bean{name='bean_104'
}, Bean{name='bean_106'
}, Bean{name='bean_108'
}, Bean{name='bean_110'
}, Bean{name='bean_112'
}, Bean{name='bean_114'
}, Bean{name='bean_116'
}, Bean{name='bean_118'
}, Bean{name='bean_120'
}, Bean{name='bean_122'
}, Bean{name='bean_124'
}, Bean{name='bean_126'
}, Bean{name='bean_128'
}, Bean{name='bean_130'
}, Bean{name='bean_132'
}, Bean{name='bean_134'
}, Bean{name='bean_136'
}, Bean{name='bean_138'
}, Bean{name='bean_140'
}, Bean{name='bean_142'
}, Bean{name='bean_144'
}, Bean{name='bean_146'
}, Bean{name='bean_148'
}, Bean{name='bean_150'
}, Bean{name='bean_152'
}, Bean{name='bean_154'
}, Bean{name='bean_156'
}, Bean{name='bean_158'
}, Bean{name='bean_160'
}, Bean{name='bean_162'
}, Bean{name='bean_164'
}, Bean{name='bean_166'
}, Bean{name='bean_168'
}, Bean{name='bean_170'
}, Bean{name='bean_172'
}, Bean{name='bean_174'
}, Bean{name='bean_176'
}, Bean{name='bean_178'
}, Bean{name='bean_180'
}, Bean{name='bean_182'
}, Bean{name='bean_184'
}, Bean{name='bean_186'
}, Bean{name='bean_188'
}, Bean{name='bean_190'
}, Bean{name='bean_192'
}, Bean{name='bean_194'
}, Bean{name='bean_196'
}, Bean{name='bean_198'
}, Bean{name='bean_200'
}, Bean{name='bean_202'
}, Bean{name='bean_204'
}, Bean{name='bean_206'
}, Bean{name='bean_208'
}, Bean{name='bean_210'
}, Bean{name='bean_212'
}, Bean{name='bean_214'
}, Bean{name='bean_216'
}, Bean{name='bean_218'
}, Bean{name='bean_220'
}, Bean{name='bean_222'
}, Bean{name='bean_224'
}, Bean{name='bean_226'
}, Bean{name='bean_228'
}, Bean{name='bean_230'
}, Bean{name='bean_232'
}, Bean{name='bean_234'
}, Bean{name='bean_236'
}, Bean{name='bean_238'
}, Bean{name='bean_240'
}, Bean{name='bean_242'
}, Bean{name='bean_244'
}, Bean{name='bean_246'
}, Bean{name='bean_248'
}, Bean{name='bean_250'
}, Bean{name='bean_252'
}, Bean{name='bean_254'
}, Bean{name='bean_256'
}, Bean{name='bean_258'
}, Bean{name='bean_260'
}, Bean{name='bean_262'
}, Bean{name='bean_264'
}, Bean{name='bean_266'
}, Bean{name='bean_268'
}, Bean{name='bean_270'
}, Bean{name='bean_272'
}, Bean{name='bean_274'
}, Bean{name='bean_276'
}, Bean{name='bean_278'
}, Bean{name='bean_280'
}, Bean{name='bean_282'
}, Bean{name='bean_284'
}, Bean{name='bean_286'
}, Bean{name='bean_288'
}, Bean{name='bean_290'
}, Bean{name='bean_292'
}, Bean{name='bean_294'
}, Bean{name='bean_296'
}, Bean{name='bean_298'
}, Bean{name='bean_300'
}, Bean{name='bean_302'
}, Bean{name='bean_304'
}, Bean{name='bean_306'
}, Bean{name='bean_308'
}, Bean{name='bean_310'
}, Bean{name='bean_312'
}, Bean{name='bean_314'
}, Bean{name='bean_316'
}, Bean{name='bean_318'
}, Bean{name='bean_320'
}, Bean{name='bean_322'
}, Bean{name='bean_324'
}, Bean{name='bean_326'
}, Bean{name='bean_328'
}, Bean{name='bean_330'
}, Bean{name='bean_332'
}, Bean{name='bean_334'
}, Bean{name='bean_336'
}, Bean{name='bean_338'
}, Bean{name='bean_340'
}, Bean{name='bean_342'
}, Bean{name='bean_344'
}, Bean{name='bean_346'
}, Bean{name='bean_348'
}, Bean{name='bean_350'
}, Bean{name='bean_352'
}, Bean{name='bean_3542019-01-14 22:15:55.975 3050-3050/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: updated: [Bean{name='multiple_of_3_bean_1002'
}, Bean{name='multiple_of_3_bean_1005'
}, Bean{name='multiple_of_3_bean_1008'
}, Bean{name='multiple_of_3_bean_1011'
}, Bean{name='multiple_of_3_bean_1014'
}, Bean{name='multiple_of_3_bean_1017'
}, Bean{name='multiple_of_3_bean_1020'
}, Bean{name='multiple_of_3_bean_1023'
}, Bean{name='multiple_of_3_bean_1026'
}, Bean{name='multiple_of_3_bean_1029'
}, Bean{name='multiple_of_3_bean_1032'
}, Bean{name='multiple_of_3_bean_1035'
}, Bean{name='multiple_of_3_bean_1038'
}, Bean{name='multiple_of_3_bean_1041'
}, Bean{name='multiple_of_3_bean_1044'
}, Bean{name='multiple_of_3_bean_1047'
}, Bean{name='multiple_of_3_bean_1050'
}, Bean{name='multiple_of_3_bean_1053'
}, Bean{name='multiple_of_3_bean_1056'
}, Bean{name='multiple_of_3_bean_1059'
}, Bean{name='multiple_of_3_bean_1062'
}, Bean{name='multiple_of_3_bean_1065'
}, Bean{name='multiple_of_3_bean_1068'
}, Bean{name='multiple_of_3_bean_1071'
}, Bean{name='multiple_of_3_bean_1074'
}, Bean{name='multiple_of_3_bean_1077'
}, Bean{name='multiple_of_3_bean_1080'
}, Bean{name='multiple_of_3_bean_1083'
}, Bean{name='multiple_of_3_bean_1086'
}, Bean{name='multiple_of_3_bean_1089'
}, Bean{name='multiple_of_3_bean_1092'
}, Bean{name='multiple_of_3_bean_1095'
}, Bean{name='multiple_of_3_bean_1098'
}, Bean{name='multiple_of_3_bean_1101'
}, Bean{name='multiple_of_3_bean_1104'
}, Bean{name='multiple_of_3_bean_1107'
}, Bean{name='multiple_of_3_bean_1110'
}, Bean{name='multiple_of_3_bean_1113'
}, Bean{name='multiple_of_3_bean_1116'
}, Bean{name='multiple_of_3_bean_1119'
}, Bean{name='multiple_of_3_bean_1122'
}, Bean{name='multiple_of_3_bean_1125'
}, Bean{name='multiple_of_3_bean_1128'
}, Bean{name='multiple_of_3_bean_1131'
}, Bean{name='multiple_of_3_bean_1134'
}, Bean{name='multiple_of_3_bean_1137'
}, Bean{name='multiple_of_3_bean_1140'
}, Bean{name='multiple_of_3_bean_1143'
}, Bean{name='multiple_of_3_bean_1146'
}, Bean{name='multiple_of_3_bean_1149'
}, Bean{name='multiple_of_3_bean_1152'
}, Bean{name='multiple_of_3_bean_1155'
}, Bean{name='multiple_of_3_bean_1158'
}, Bean{name='multiple_of_3_bean_1161'
}, Bean{name='multiple_of_3_bean_1164'
}, Bean{name='multiple_of_3_bean_1167'
}, Bean{name='multiple_of_3_bean_1170'
}, Bean{name='multiple_of_3_bean_1173'
}, Bean{name='multiple_of_3_bean_1176'
}, Bean{name='multiple_of_3_bean_1179'
}, Bean{name='multiple_of_3_bean_1182'
}, Bean{name='multiple_of_3_bean_1185'
}, Bean{name='multiple_of_3_bean_1188'
}, Bean{name='multiple_of_3_bean_1191'
}, Bean{name='multiple_of_3_bean_1194'
}, Bean{name='multiple_of_3_bean_1197'
}, Bean{name='multiple_of_3_bean_1200'
}, Bean{name='multiple_of_3_bean_1203'
}, Bean{name='multiple_of_3_bean_1206'
}, Bean{name='multiple_of_3_bean_1209'
}, Bean{name='multiple_of_3_bean_1212'
}, Bean{name='multiple_of_3_bean_1215'
}, Bean{name='multiple_of_3_bean_1218'
}, Bean{name='multiple_of_3_bean_1221'
}, Bean{name='multiple_of_3_bean_1224'
}, Bean{name='multiple_of_3_bean_1227'
}, Bean{name='multiple_of_3_bean_1230'
}, Bean{name='multiple_of_3_bean_1233'
}, Bean{name='multiple_of_3_bean_1236'
}, Bean{name='multiple_of_3_bean_1239'
}, Bean{name='multiple_of_3_bean_1242'
}, Bean{name='multiple_of_3_bean_1245'
}, Bean{name='multiple_of_3_bean_1248'
}, Bean{name='multiple_of_3_bean_1251'
}, Bean{name='multiple_of_3_bean_1254'
}, Bean{name='multiple_of_3_bean_1257'
}, Bean{name='multiple_of_3_bean_1260'
}, Bean{name='multiple_of_3_bean_1263'
}, Bean{name='multiple_of_3_bean_1266'
}, Bean{name='multiple_of_3_bean_1269'
}, Bean{name='multiple_of_3_bean_1272'
}, Bean{name='multiple_of_3_bean_1275'
}, Bean{name='multiple_of_3_bean_1278'
}, Bean{name='multiple_of_3_bean_1281'
}, Bean{name='multiple_of_3_bean_1284'
}, Bean{name='multiple_of_3_bean_1287'
}, Bean{name='multiple_of_3_bean_1290'
}, Bean{name='multiple_of_3_bean_1293'
}, Bean{name='multiple_of_3_bean_1296'
}, Bean{name='multiple_of_3_bean_1299'
}, Bean{name='multiple_of_3_bean_1302'
}, Bean{name='multiple_of_3_bean_1305'
}, Bean{name='multiple_of_3_bean_1308'
}, Bean{name='multiple_of_3_bean_1311'
}, Bean{name='multiple_of_3_bean_1314'
}, Bean{name='multiple_of_3_bean_1317'
}, Bean{na複製程式碼
- 使用 LinkedList:
2019-01-14 22:19:25.110 4432-4432/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: calculateDiff cost 362ms.2019-01-14 22:19:25.113 4432-4432/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: added: [Bean{name='bean_10000'
}, Bean{name='bean_10001'
}, Bean{name='bean_10002'
}, Bean{name='bean_10003'
}, Bean{name='bean_10004'
}, Bean{name='bean_10005'
}, Bean{name='bean_10006'
}, Bean{name='bean_10007'
}, Bean{name='bean_10008'
}, Bean{name='bean_10009'
}, Bean{name='bean_10010'
}, Bean{name='bean_10011'
}, Bean{name='bean_10012'
}, Bean{name='bean_10013'
}, Bean{name='bean_10014'
}, Bean{name='bean_10015'
}, Bean{name='bean_10016'
}, Bean{name='bean_10017'
}, Bean{name='bean_10018'
}, Bean{name='bean_10019'
}, Bean{name='bean_10020'
}, Bean{name='bean_10021'
}, Bean{name='bean_10022'
}, Bean{name='bean_10023'
}, Bean{name='bean_10024'
}, Bean{name='bean_10025'
}, Bean{name='bean_10026'
}, Bean{name='bean_10027'
}, Bean{name='bean_10028'
}, Bean{name='bean_10029'
}, Bean{name='bean_10030'
}, Bean{name='bean_10031'
}, Bean{name='bean_10032'
}, Bean{name='bean_10033'
}, Bean{name='bean_10034'
}, Bean{name='bean_10035'
}, Bean{name='bean_10036'
}, Bean{name='bean_10037'
}, Bean{name='bean_10038'
}, Bean{name='bean_10039'
}, Bean{name='bean_10040'
}, Bean{name='bean_10041'
}, Bean{name='bean_10042'
}, Bean{name='bean_10043'
}, Bean{name='bean_10044'
}, Bean{name='bean_10045'
}, Bean{name='bean_10046'
}, Bean{name='bean_10047'
}, Bean{name='bean_10048'
}, Bean{name='bean_10049'
}, Bean{name='bean_10050'
}, Bean{name='bean_10051'
}, Bean{name='bean_10052'
}, Bean{name='bean_10053'
}, Bean{name='bean_10054'
}, Bean{name='bean_10055'
}, Bean{name='bean_10056'
}, Bean{name='bean_10057'
}, Bean{name='bean_10058'
}, Bean{name='bean_10059'
}, Bean{name='bean_10060'
}, Bean{name='bean_10061'
}, Bean{name='bean_10062'
}, Bean{name='bean_10063'
}, Bean{name='bean_10064'
}, Bean{name='bean_10065'
}, Bean{name='bean_10066'
}, Bean{name='bean_10067'
}, Bean{name='bean_10068'
}, Bean{name='bean_10069'
}, Bean{name='bean_10070'
}, Bean{name='bean_10071'
}, Bean{name='bean_10072'
}, Bean{name='bean_10073'
}, Bean{name='bean_10074'
}, Bean{name='bean_10075'
}, Bean{name='bean_10076'
}, Bean{name='bean_10077'
}, Bean{name='bean_10078'
}, Bean{name='bean_10079'
}, Bean{name='bean_10080'
}, Bean{name='bean_10081'
}, Bean{name='bean_10082'
}, Bean{name='bean_10083'
}, Bean{name='bean_10084'
}, Bean{name='bean_10085'
}, Bean{name='bean_10086'
}, Bean{name='bean_10087'
}, Bean{name='bean_10088'
}, Bean{name='bean_10089'
}, Bean{name='bean_10090'
}, Bean{name='bean_10091'
}, Bean{name='bean_10092'
}, Bean{name='bean_10093'
}, Bean{name='bean_10094'
}, Bean{name='bean_10095'
}, Bean{name='bean_10096'
}, Bean{name='bean_10097'
}, Bean{name='bean_10098'
}, Bean{name='bean_10099'
}, Bean{name='bean_10100'
}, Bean{name='bean_10101'
}, Bean{name='bean_10102'
}, Bean{name='bean_10103'
}, Bean{name='bean_10104'
}, Bean{name='bean_10105'
}, Bean{name='bean_10106'
}, Bean{name='bean_10107'
}, Bean{name='bean_10108'
}, Bean{name='bean_10109'
}, Bean{name='bean_10110'
}, Bean{name='bean_10111'
}, Bean{name='bean_10112'
}, Bean{name='bean_10113'
}, Bean{name='bean_10114'
}, Bean{name='bean_10115'
}, Bean{name='bean_10116'
}, Bean{name='bean_10117'
}, Bean{name='bean_10118'
}, Bean{name='bean_10119'
}, Bean{name='bean_10120'
}, Bean{name='bean_10121'
}, Bean{name='bean_10122'
}, Bean{name='bean_10123'
}, Bean{name='bean_10124'
}, Bean{name='bean_10125'
}, Bean{name='bean_10126'
}, Bean{name='bean_10127'
}, Bean{name='bean_10128'
}, Bean{name='bean_10129'
}, Bean{name='bean_10130'
}, Bean{name='bean_10131'
}, Bean{name='bean_10132'
}, Bean{name='bean_10133'
}, Bean{name='bean_10134'
}, Bean{name='bean_10135'
}, Bean{name='bean_10136'
}, Bean{name='bean_10137'
}, Bean{name='bean_10138'
}, Bean{name='bean_10139'
}, Bean{name='bean_10140'
}, Bean{name='bean_10141'
}, Bean{name='bean_10142'
}, Bean{name='bean_10143'
}, Bean{name='bean_10144'
}, Bean{name='bean_10145'
}, Bean{name='bean_10146'
}, Bean{name='bean_10147'
}, Bean{name='bean_10148'
}, Bean{name='bean_10149'
}, Bean{name='bean_10150'
}, Bean{name='bean_10151'
}, Bean{name='bean_10152'
}, Bean{name='bean_10153'
}, Bean{name='bean_10154'
}, Bean{name='bean_10155'
}, Bean{name='bean_10156'
}, Bean{name='bean_10157'
}, Bean{name='bean_10158'
}, Bean{name='bean_10159'
}, Bean{name='bean_10160'
}, Bean{name='b2019-01-14 22:19:25.114 4432-4432/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: deleted: [Bean{name='bean_0'
}, Bean{name='bean_2'
}, Bean{name='bean_4'
}, Bean{name='bean_6'
}, Bean{name='bean_8'
}, Bean{name='bean_10'
}, Bean{name='bean_12'
}, Bean{name='bean_14'
}, Bean{name='bean_16'
}, Bean{name='bean_18'
}, Bean{name='bean_20'
}, Bean{name='bean_22'
}, Bean{name='bean_24'
}, Bean{name='bean_26'
}, Bean{name='bean_28'
}, Bean{name='bean_30'
}, Bean{name='bean_32'
}, Bean{name='bean_34'
}, Bean{name='bean_36'
}, Bean{name='bean_38'
}, Bean{name='bean_40'
}, Bean{name='bean_42'
}, Bean{name='bean_44'
}, Bean{name='bean_46'
}, Bean{name='bean_48'
}, Bean{name='bean_50'
}, Bean{name='bean_52'
}, Bean{name='bean_54'
}, Bean{name='bean_56'
}, Bean{name='bean_58'
}, Bean{name='bean_60'
}, Bean{name='bean_62'
}, Bean{name='bean_64'
}, Bean{name='bean_66'
}, Bean{name='bean_68'
}, Bean{name='bean_70'
}, Bean{name='bean_72'
}, Bean{name='bean_74'
}, Bean{name='bean_76'
}, Bean{name='bean_78'
}, Bean{name='bean_80'
}, Bean{name='bean_82'
}, Bean{name='bean_84'
}, Bean{name='bean_86'
}, Bean{name='bean_88'
}, Bean{name='bean_90'
}, Bean{name='bean_92'
}, Bean{name='bean_94'
}, Bean{name='bean_96'
}, Bean{name='bean_98'
}, Bean{name='bean_100'
}, Bean{name='bean_102'
}, Bean{name='bean_104'
}, Bean{name='bean_106'
}, Bean{name='bean_108'
}, Bean{name='bean_110'
}, Bean{name='bean_112'
}, Bean{name='bean_114'
}, Bean{name='bean_116'
}, Bean{name='bean_118'
}, Bean{name='bean_120'
}, Bean{name='bean_122'
}, Bean{name='bean_124'
}, Bean{name='bean_126'
}, Bean{name='bean_128'
}, Bean{name='bean_130'
}, Bean{name='bean_132'
}, Bean{name='bean_134'
}, Bean{name='bean_136'
}, Bean{name='bean_138'
}, Bean{name='bean_140'
}, Bean{name='bean_142'
}, Bean{name='bean_144'
}, Bean{name='bean_146'
}, Bean{name='bean_148'
}, Bean{name='bean_150'
}, Bean{name='bean_152'
}, Bean{name='bean_154'
}, Bean{name='bean_156'
}, Bean{name='bean_158'
}, Bean{name='bean_160'
}, Bean{name='bean_162'
}, Bean{name='bean_164'
}, Bean{name='bean_166'
}, Bean{name='bean_168'
}, Bean{name='bean_170'
}, Bean{name='bean_172'
}, Bean{name='bean_174'
}, Bean{name='bean_176'
}, Bean{name='bean_178'
}, Bean{name='bean_180'
}, Bean{name='bean_182'
}, Bean{name='bean_184'
}, Bean{name='bean_186'
}, Bean{name='bean_188'
}, Bean{name='bean_190'
}, Bean{name='bean_192'
}, Bean{name='bean_194'
}, Bean{name='bean_196'
}, Bean{name='bean_198'
}, Bean{name='bean_200'
}, Bean{name='bean_202'
}, Bean{name='bean_204'
}, Bean{name='bean_206'
}, Bean{name='bean_208'
}, Bean{name='bean_210'
}, Bean{name='bean_212'
}, Bean{name='bean_214'
}, Bean{name='bean_216'
}, Bean{name='bean_218'
}, Bean{name='bean_220'
}, Bean{name='bean_222'
}, Bean{name='bean_224'
}, Bean{name='bean_226'
}, Bean{name='bean_228'
}, Bean{name='bean_230'
}, Bean{name='bean_232'
}, Bean{name='bean_234'
}, Bean{name='bean_236'
}, Bean{name='bean_238'
}, Bean{name='bean_240'
}, Bean{name='bean_242'
}, Bean{name='bean_244'
}, Bean{name='bean_246'
}, Bean{name='bean_248'
}, Bean{name='bean_250'
}, Bean{name='bean_252'
}, Bean{name='bean_254'
}, Bean{name='bean_256'
}, Bean{name='bean_258'
}, Bean{name='bean_260'
}, Bean{name='bean_262'
}, Bean{name='bean_264'
}, Bean{name='bean_266'
}, Bean{name='bean_268'
}, Bean{name='bean_270'
}, Bean{name='bean_272'
}, Bean{name='bean_274'
}, Bean{name='bean_276'
}, Bean{name='bean_278'
}, Bean{name='bean_280'
}, Bean{name='bean_282'
}, Bean{name='bean_284'
}, Bean{name='bean_286'
}, Bean{name='bean_288'
}, Bean{name='bean_290'
}, Bean{name='bean_292'
}, Bean{name='bean_294'
}, Bean{name='bean_296'
}, Bean{name='bean_298'
}, Bean{name='bean_300'
}, Bean{name='bean_302'
}, Bean{name='bean_304'
}, Bean{name='bean_306'
}, Bean{name='bean_308'
}, Bean{name='bean_310'
}, Bean{name='bean_312'
}, Bean{name='bean_314'
}, Bean{name='bean_316'
}, Bean{name='bean_318'
}, Bean{name='bean_320'
}, Bean{name='bean_322'
}, Bean{name='bean_324'
}, Bean{name='bean_326'
}, Bean{name='bean_328'
}, Bean{name='bean_330'
}, Bean{name='bean_332'
}, Bean{name='bean_334'
}, Bean{name='bean_336'
}, Bean{name='bean_338'
}, Bean{name='bean_340'
}, Bean{name='bean_342'
}, Bean{name='bean_344'
}, Bean{name='bean_346'
}, Bean{name='bean_348'
}, Bean{name='bean_350'
}, Bean{name='bean_352'
}, Bean{name='bean_3542019-01-14 22:19:25.115 4432-4432/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: updated: [Bean{name='multiple_of_3_bean_1002'
}, Bean{name='multiple_of_3_bean_1005'
}, Bean{name='multiple_of_3_bean_1008'
}, Bean{name='multiple_of_3_bean_1011'
}, Bean{name='multiple_of_3_bean_1014'
}, Bean{name='multiple_of_3_bean_1017'
}, Bean{name='multiple_of_3_bean_1020'
}, Bean{name='multiple_of_3_bean_1023'
}, Bean{name='multiple_of_3_bean_1026'
}, Bean{name='multiple_of_3_bean_1029'
}, Bean{name='multiple_of_3_bean_1032'
}, Bean{name='multiple_of_3_bean_1035'
}, Bean{name='multiple_of_3_bean_1038'
}, Bean{name='multiple_of_3_bean_1041'
}, Bean{name='multiple_of_3_bean_1044'
}, Bean{name='multiple_of_3_bean_1047'
}, Bean{name='multiple_of_3_bean_1050'
}, Bean{name='multiple_of_3_bean_1053'
}, Bean{name='multiple_of_3_bean_1056'
}, Bean{name='multiple_of_3_bean_1059'
}, Bean{name='multiple_of_3_bean_1062'
}, Bean{name='multiple_of_3_bean_1065'
}, Bean{name='multiple_of_3_bean_1068'
}, Bean{name='multiple_of_3_bean_1071'
}, Bean{name='multiple_of_3_bean_1074'
}, Bean{name='multiple_of_3_bean_1077'
}, Bean{name='multiple_of_3_bean_1080'
}, Bean{name='multiple_of_3_bean_1083'
}, Bean{name='multiple_of_3_bean_1086'
}, Bean{name='multiple_of_3_bean_1089'
}, Bean{name='multiple_of_3_bean_1092'
}, Bean{name='multiple_of_3_bean_1095'
}, Bean{name='multiple_of_3_bean_1098'
}, Bean{name='multiple_of_3_bean_1101'
}, Bean{name='multiple_of_3_bean_1104'
}, Bean{name='multiple_of_3_bean_1107'
}, Bean{name='multiple_of_3_bean_1110'
}, Bean{name='multiple_of_3_bean_1113'
}, Bean{name='multiple_of_3_bean_1116'
}, Bean{name='multiple_of_3_bean_1119'
}, Bean{name='multiple_of_3_bean_1122'
}, Bean{name='multiple_of_3_bean_1125'
}, Bean{name='multiple_of_3_bean_1128'
}, Bean{name='multiple_of_3_bean_1131'
}, Bean{name='multiple_of_3_bean_1134'
}, Bean{name='multiple_of_3_bean_1137'
}, Bean{name='multiple_of_3_bean_1140'
}, Bean{name='multiple_of_3_bean_1143'
}, Bean{name='multiple_of_3_bean_1146'
}, Bean{name='multiple_of_3_bean_1149'
}, Bean{name='multiple_of_3_bean_1152'
}, Bean{name='multiple_of_3_bean_1155'
}, Bean{name='multiple_of_3_bean_1158'
}, Bean{name='multiple_of_3_bean_1161'
}, Bean{name='multiple_of_3_bean_1164'
}, Bean{name='multiple_of_3_bean_1167'
}, Bean{name='multiple_of_3_bean_1170'
}, Bean{name='multiple_of_3_bean_1173'
}, Bean{name='multiple_of_3_bean_1176'
}, Bean{name='multiple_of_3_bean_1179'
}, Bean{name='multiple_of_3_bean_1182'
}, Bean{name='multiple_of_3_bean_1185'
}, Bean{name='multiple_of_3_bean_1188'
}, Bean{name='multiple_of_3_bean_1191'
}, Bean{name='multiple_of_3_bean_1194'
}, Bean{name='multiple_of_3_bean_1197'
}, Bean{name='multiple_of_3_bean_1200'
}, Bean{name='multiple_of_3_bean_1203'
}, Bean{name='multiple_of_3_bean_1206'
}, Bean{name='multiple_of_3_bean_1209'
}, Bean{name='multiple_of_3_bean_1212'
}, Bean{name='multiple_of_3_bean_1215'
}, Bean{name='multiple_of_3_bean_1218'
}, Bean{name='multiple_of_3_bean_1221'
}, Bean{name='multiple_of_3_bean_1224'
}, Bean{name='multiple_of_3_bean_1227'
}, Bean{name='multiple_of_3_bean_1230'
}, Bean{name='multiple_of_3_bean_1233'
}, Bean{name='multiple_of_3_bean_1236'
}, Bean{name='multiple_of_3_bean_1239'
}, Bean{name='multiple_of_3_bean_1242'
}, Bean{name='multiple_of_3_bean_1245'
}, Bean{name='multiple_of_3_bean_1248'
}, Bean{name='multiple_of_3_bean_1251'
}, Bean{name='multiple_of_3_bean_1254'
}, Bean{name='multiple_of_3_bean_1257'
}, Bean{name='multiple_of_3_bean_1260'
}, Bean{name='multiple_of_3_bean_1263'
}, Bean{name='multiple_of_3_bean_1266'
}, Bean{name='multiple_of_3_bean_1269'
}, Bean{name='multiple_of_3_bean_1272'
}, Bean{name='multiple_of_3_bean_1275'
}, Bean{name='multiple_of_3_bean_1278'
}, Bean{name='multiple_of_3_bean_1281'
}, Bean{name='multiple_of_3_bean_1284'
}, Bean{name='multiple_of_3_bean_1287'
}, Bean{name='multiple_of_3_bean_1290'
}, Bean{name='multiple_of_3_bean_1293'
}, Bean{name='multiple_of_3_bean_1296'
}, Bean{name='multiple_of_3_bean_1299'
}, Bean{name='multiple_of_3_bean_1302'
}, Bean{name='multiple_of_3_bean_1305'
}, Bean{name='multiple_of_3_bean_1308'
}, Bean{name='multiple_of_3_bean_1311'
}, Bean{name='multiple_of_3_bean_1314'
}, Bean{name='multiple_of_3_bean_1317'
}, Bean{na複製程式碼
顯然,ArrayList 完勝 LinkedList,因為 LinkedList 的 get、remove 操作都需要從頭開始遍歷,相當於演算法的複雜度變成了 O(n²),所以耗時大大增加:
Node<
E>
node(int index) {
if (index <
(size >
>
1)) {
Node<
E>
x = first;
for (int i = 0;
i <
index;
i++) x = x.next;
return x;
} else {
Node<
E>
x = last;
for (int i = size - 1;
i >
index;
i--) x = x.prev;
return x;
}
}複製程式碼
藉助 Map 實現差異比較
演算法簡介
該演算法來自 Lance_小超 《Java 快速進行物件集合資料比對》,這種寫法主要用於集合元素的分類,比如音樂播放器中按歌曲名、歌手名、資料夾名等對所有歌曲進行分類。如果用於實現集合比較的話,還需要引入一個變數 type,以表示元素是新增的、不變的、已更新的還是刪除的。
程式碼實現
/* * Copyright (C) 2018 Yuloran(https://github.com/Yuloran) * * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.yuloran.wanandroid_java.ui;
import android.util.ArrayMap;
import com.yuloran.lib_core.utils.Logger;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import androidx.annotation.NonNull;
/** * [集合比較工具] * <
p>
* Author: Yuloran * Date Added: 2019/1/14 19:45 * * @since 1.0.0 */public final class DiffUtil2{
private static final String TAG = "DiffUtil2";
private DiffUtil2() {
} private static class Bean {
@NonNull String id;
@NonNull String name;
private Bean(@NonNull String id, @NonNull String name) {
this.id = id;
this.name = name;
} @Override public boolean equals(Object o) {
if (this == o) {
return true;
} if (o == null || getClass() != o.getClass()) {
return false;
} Bean bean = (Bean) o;
if (!id.equals(bean.id)) {
return false;
} return name.equals(bean.name);
} @Override public int hashCode() {
int result = id.hashCode();
result = 31 * result + name.hashCode();
return result;
} @Override public String toString() {
return "Bean{" + "name='" + name + '\'' + '
}';
}
} private static class Model<
T>
{
private T value;
/** * 1相同 2更新 3新增 4刪除 */ private int type;
private Model(T value, int type) {
this.value = value;
this.type = type;
}
} public static void calculateDiff() {
List<
Bean>
originalList = generateOriginalList();
List<
Bean>
latestList = generateLatestList();
List<
Bean>
added = new ArrayList<
>
();
List<
Bean>
deleted = new ArrayList<
>
();
List<
Bean>
updated = new ArrayList<
>
();
long timestamp = System.currentTimeMillis();
Map<
String, Model<
Bean>
>
map = new ArrayMap<
>
(latestList.size());
for (Bean bean : originalList) {
map.put(bean.id, new Model<
>
(bean, 4));
} for (Bean bean : latestList) {
Model<
Bean>
model = map.get(bean.id);
if (model == null) {
// 新增元素 map.put(bean.id, new Model<
>
(bean, 3));
continue;
} if (bean.equals(model.value)) {
// 保持不變的元素 map.put(bean.id, new Model<
>
(bean, 1));
} else {
// 已更新元素 map.put(bean.id, new Model<
>
(bean, 2));
}
} for (Map.Entry<
String, Model<
Bean>
>
entry : map.entrySet()) {
switch (entry.getValue().type) {
case 1://相同 break;
case 2://更新 updated.add(entry.getValue().value);
break;
case 3://新增 added.add(entry.getValue().value);
break;
case 4://刪除 deleted.add(entry.getValue().value);
break;
default:
}
} Logger.debug(TAG, "calculateDiff cost %dms.", (System.currentTimeMillis() - timestamp));
Logger.debug(TAG, "added: %s", added);
Logger.debug(TAG, "deleted: %s", deleted);
Logger.debug(TAG, "updated: %s", updated);
} private static List<
Bean>
generateOriginalList() {
List<
Bean>
originalList = new ArrayList<
>
();
for (int i = 0;
i <
10000;
i++) {
originalList.add(new Bean(String.valueOf(i), "bean_" + String.valueOf(i)));
} return originalList;
} private static List<
Bean>
generateLatestList() {
List<
Bean>
latestList = new ArrayList<
>
();
for (int i = 0;
i <
10500;
i++) {
if (i <
1000) {
if (i % 2 == 0) {
continue;
}
} if (i >
1000 &
&
i <
2000) {
if (i % 3 == 0) {
latestList.add(new Bean(String.valueOf(i), "multiple_of_3_bean_" + String.valueOf(i)));
continue;
}
} latestList.add(new Bean(String.valueOf(i), "bean_" + String.valueOf(i)));
} return latestList;
}
}複製程式碼
效能對比
資料量為 1 萬時(ArrayMap):
2019-01-14 23:26:43.807 7980-7980/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: calculateDiff cost 12ms.2019-01-14 23:26:43.807 7980-7980/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: added: [Bean{name='bean_10000'
}, Bean{name='bean_10001'
}, Bean{name='bean_10002'
}, Bean{name='bean_10003'
}, Bean{name='bean_10004'
}, Bean{name='bean_10005'
}, Bean{name='bean_10006'
}, Bean{name='bean_10007'
}, Bean{name='bean_10008'
}, Bean{name='bean_10009'
}, Bean{name='bean_10010'
}, Bean{name='bean_10011'
}, Bean{name='bean_10012'
}, Bean{name='bean_10013'
}, Bean{name='bean_10014'
}, Bean{name='bean_10015'
}, Bean{name='bean_10016'
}, Bean{name='bean_10017'
}, Bean{name='bean_10018'
}, Bean{name='bean_10019'
}, Bean{name='bean_10020'
}, Bean{name='bean_10021'
}, Bean{name='bean_10022'
}, Bean{name='bean_10023'
}, Bean{name='bean_10024'
}, Bean{name='bean_10025'
}, Bean{name='bean_10026'
}, Bean{name='bean_10027'
}, Bean{name='bean_10028'
}, Bean{name='bean_10029'
}, Bean{name='bean_10030'
}, Bean{name='bean_10031'
}, Bean{name='bean_10032'
}, Bean{name='bean_10033'
}, Bean{name='bean_10034'
}, Bean{name='bean_10035'
}, Bean{name='bean_10036'
}, Bean{name='bean_10037'
}, Bean{name='bean_10038'
}, Bean{name='bean_10039'
}, Bean{name='bean_10040'
}, Bean{name='bean_10041'
}, Bean{name='bean_10042'
}, Bean{name='bean_10043'
}, Bean{name='bean_10044'
}, Bean{name='bean_10045'
}, Bean{name='bean_10046'
}, Bean{name='bean_10047'
}, Bean{name='bean_10048'
}, Bean{name='bean_10049'
}, Bean{name='bean_10050'
}, Bean{name='bean_10051'
}, Bean{name='bean_10052'
}, Bean{name='bean_10053'
}, Bean{name='bean_10054'
}, Bean{name='bean_10055'
}, Bean{name='bean_10056'
}, Bean{name='bean_10057'
}, Bean{name='bean_10058'
}, Bean{name='bean_10059'
}, Bean{name='bean_10060'
}, Bean{name='bean_10061'
}, Bean{name='bean_10062'
}, Bean{name='bean_10063'
}, Bean{name='bean_10064'
}, Bean{name='bean_10065'
}, Bean{name='bean_10066'
}, Bean{name='bean_10067'
}, Bean{name='bean_10068'
}, Bean{name='bean_10069'
}, Bean{name='bean_10070'
}, Bean{name='bean_10071'
}, Bean{name='bean_10072'
}, Bean{name='bean_10073'
}, Bean{name='bean_10074'
}, Bean{name='bean_10075'
}, Bean{name='bean_10076'
}, Bean{name='bean_10077'
}, Bean{name='bean_10078'
}, Bean{name='bean_10079'
}, Bean{name='bean_10080'
}, Bean{name='bean_10081'
}, Bean{name='bean_10082'
}, Bean{name='bean_10083'
}, Bean{name='bean_10084'
}, Bean{name='bean_10085'
}, Bean{name='bean_10086'
}, Bean{name='bean_10087'
}, Bean{name='bean_10088'
}, Bean{name='bean_10089'
}, Bean{name='bean_10090'
}, Bean{name='bean_10091'
}, Bean{name='bean_10092'
}, Bean{name='bean_10093'
}, Bean{name='bean_10094'
}, Bean{name='bean_10095'
}, Bean{name='bean_10096'
}, Bean{name='bean_10097'
}, Bean{name='bean_10098'
}, Bean{name='bean_10099'
}, Bean{name='bean_10100'
}, Bean{name='bean_10101'
}, Bean{name='bean_10102'
}, Bean{name='bean_10103'
}, Bean{name='bean_10104'
}, Bean{name='bean_10105'
}, Bean{name='bean_10106'
}, Bean{name='bean_10107'
}, Bean{name='bean_10108'
}, Bean{name='bean_10109'
}, Bean{name='bean_10110'
}, Bean{name='bean_10111'
}, Bean{name='bean_10112'
}, Bean{name='bean_10113'
}, Bean{name='bean_10114'
}, Bean{name='bean_10115'
}, Bean{name='bean_10116'
}, Bean{name='bean_10117'
}, Bean{name='bean_10118'
}, Bean{name='bean_10119'
}, Bean{name='bean_10120'
}, Bean{name='bean_10121'
}, Bean{name='bean_10122'
}, Bean{name='bean_10123'
}, Bean{name='bean_10124'
}, Bean{name='bean_10125'
}, Bean{name='bean_10126'
}, Bean{name='bean_10127'
}, Bean{name='bean_10128'
}, Bean{name='bean_10129'
}, Bean{name='bean_10130'
}, Bean{name='bean_10131'
}, Bean{name='bean_10132'
}, Bean{name='bean_10133'
}, Bean{name='bean_10134'
}, Bean{name='bean_10135'
}, Bean{name='bean_10136'
}, Bean{name='bean_10137'
}, Bean{name='bean_10138'
}, Bean{name='bean_10139'
}, Bean{name='bean_10140'
}, Bean{name='bean_10141'
}, Bean{name='bean_10142'
}, Bean{name='bean_10143'
}, Bean{name='bean_10144'
}, Bean{name='bean_10145'
}, Bean{name='bean_10146'
}, Bean{name='bean_10147'
}, Bean{name='bean_10148'
}, Bean{name='bean_10149'
}, Bean{name='bean_10150'
}, Bean{name='bean_10151'
}, Bean{name='bean_10152'
}, Bean{name='bean_10153'
}, Bean{name='bean_10154'
}, Bean{name='bean_10155'
}, Bean{name='bean_10156'
}, Bean{name='bean_10157'
}, Bean{name='bean_10158'
}, Bean{name='bean_10159'
}, Bean{name='bean_10160'
}, Bean{name='b2019-01-14 23:26:43.808 7980-7980/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: deleted: [Bean{name='bean_0'
}, Bean{name='bean_2'
}, Bean{name='bean_4'
}, Bean{name='bean_6'
}, Bean{name='bean_8'
}, Bean{name='bean_10'
}, Bean{name='bean_12'
}, Bean{name='bean_14'
}, Bean{name='bean_16'
}, Bean{name='bean_18'
}, Bean{name='bean_20'
}, Bean{name='bean_22'
}, Bean{name='bean_24'
}, Bean{name='bean_26'
}, Bean{name='bean_28'
}, Bean{name='bean_30'
}, Bean{name='bean_32'
}, Bean{name='bean_34'
}, Bean{name='bean_36'
}, Bean{name='bean_38'
}, Bean{name='bean_40'
}, Bean{name='bean_42'
}, Bean{name='bean_44'
}, Bean{name='bean_46'
}, Bean{name='bean_48'
}, Bean{name='bean_50'
}, Bean{name='bean_52'
}, Bean{name='bean_54'
}, Bean{name='bean_56'
}, Bean{name='bean_58'
}, Bean{name='bean_60'
}, Bean{name='bean_62'
}, Bean{name='bean_64'
}, Bean{name='bean_66'
}, Bean{name='bean_68'
}, Bean{name='bean_70'
}, Bean{name='bean_72'
}, Bean{name='bean_74'
}, Bean{name='bean_76'
}, Bean{name='bean_78'
}, Bean{name='bean_80'
}, Bean{name='bean_82'
}, Bean{name='bean_84'
}, Bean{name='bean_86'
}, Bean{name='bean_88'
}, Bean{name='bean_90'
}, Bean{name='bean_92'
}, Bean{name='bean_94'
}, Bean{name='bean_96'
}, Bean{name='bean_98'
}, Bean{name='bean_100'
}, Bean{name='bean_102'
}, Bean{name='bean_104'
}, Bean{name='bean_106'
}, Bean{name='bean_108'
}, Bean{name='bean_110'
}, Bean{name='bean_112'
}, Bean{name='bean_114'
}, Bean{name='bean_116'
}, Bean{name='bean_118'
}, Bean{name='bean_120'
}, Bean{name='bean_122'
}, Bean{name='bean_124'
}, Bean{name='bean_126'
}, Bean{name='bean_128'
}, Bean{name='bean_130'
}, Bean{name='bean_132'
}, Bean{name='bean_134'
}, Bean{name='bean_136'
}, Bean{name='bean_138'
}, Bean{name='bean_140'
}, Bean{name='bean_142'
}, Bean{name='bean_144'
}, Bean{name='bean_146'
}, Bean{name='bean_148'
}, Bean{name='bean_150'
}, Bean{name='bean_152'
}, Bean{name='bean_154'
}, Bean{name='bean_156'
}, Bean{name='bean_158'
}, Bean{name='bean_160'
}, Bean{name='bean_162'
}, Bean{name='bean_164'
}, Bean{name='bean_166'
}, Bean{name='bean_168'
}, Bean{name='bean_170'
}, Bean{name='bean_172'
}, Bean{name='bean_174'
}, Bean{name='bean_176'
}, Bean{name='bean_178'
}, Bean{name='bean_180'
}, Bean{name='bean_182'
}, Bean{name='bean_184'
}, Bean{name='bean_186'
}, Bean{name='bean_188'
}, Bean{name='bean_190'
}, Bean{name='bean_192'
}, Bean{name='bean_194'
}, Bean{name='bean_196'
}, Bean{name='bean_198'
}, Bean{name='bean_200'
}, Bean{name='bean_202'
}, Bean{name='bean_204'
}, Bean{name='bean_206'
}, Bean{name='bean_208'
}, Bean{name='bean_210'
}, Bean{name='bean_212'
}, Bean{name='bean_214'
}, Bean{name='bean_216'
}, Bean{name='bean_218'
}, Bean{name='bean_220'
}, Bean{name='bean_222'
}, Bean{name='bean_224'
}, Bean{name='bean_226'
}, Bean{name='bean_228'
}, Bean{name='bean_230'
}, Bean{name='bean_232'
}, Bean{name='bean_234'
}, Bean{name='bean_236'
}, Bean{name='bean_238'
}, Bean{name='bean_240'
}, Bean{name='bean_242'
}, Bean{name='bean_244'
}, Bean{name='bean_246'
}, Bean{name='bean_248'
}, Bean{name='bean_250'
}, Bean{name='bean_252'
}, Bean{name='bean_254'
}, Bean{name='bean_256'
}, Bean{name='bean_258'
}, Bean{name='bean_260'
}, Bean{name='bean_262'
}, Bean{name='bean_264'
}, Bean{name='bean_266'
}, Bean{name='bean_268'
}, Bean{name='bean_270'
}, Bean{name='bean_272'
}, Bean{name='bean_274'
}, Bean{name='bean_276'
}, Bean{name='bean_278'
}, Bean{name='bean_280'
}, Bean{name='bean_282'
}, Bean{name='bean_284'
}, Bean{name='bean_286'
}, Bean{name='bean_288'
}, Bean{name='bean_290'
}, Bean{name='bean_292'
}, Bean{name='bean_294'
}, Bean{name='bean_296'
}, Bean{name='bean_298'
}, Bean{name='bean_300'
}, Bean{name='bean_302'
}, Bean{name='bean_304'
}, Bean{name='bean_306'
}, Bean{name='bean_308'
}, Bean{name='bean_310'
}, Bean{name='bean_312'
}, Bean{name='bean_314'
}, Bean{name='bean_316'
}, Bean{name='bean_318'
}, Bean{name='bean_320'
}, Bean{name='bean_322'
}, Bean{name='bean_324'
}, Bean{name='bean_326'
}, Bean{name='bean_328'
}, Bean{name='bean_330'
}, Bean{name='bean_332'
}, Bean{name='bean_334'
}, Bean{name='bean_336'
}, Bean{name='bean_338'
}, Bean{name='bean_340'
}, Bean{name='bean_342'
}, Bean{name='bean_344'
}, Bean{name='bean_346'
}, Bean{name='bean_348'
}, Bean{name='bean_350'
}, Bean{name='bean_352'
}, Bean{name='bean_3542019-01-14 23:26:43.809 7980-7980/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: updated: [Bean{name='multiple_of_3_bean_1002'
}, Bean{name='multiple_of_3_bean_1005'
}, Bean{name='multiple_of_3_bean_1008'
}, Bean{name='multiple_of_3_bean_1011'
}, Bean{name='multiple_of_3_bean_1014'
}, Bean{name='multiple_of_3_bean_1017'
}, Bean{name='multiple_of_3_bean_1020'
}, Bean{name='multiple_of_3_bean_1023'
}, Bean{name='multiple_of_3_bean_1026'
}, Bean{name='multiple_of_3_bean_1029'
}, Bean{name='multiple_of_3_bean_1032'
}, Bean{name='multiple_of_3_bean_1035'
}, Bean{name='multiple_of_3_bean_1038'
}, Bean{name='multiple_of_3_bean_1041'
}, Bean{name='multiple_of_3_bean_1044'
}, Bean{name='multiple_of_3_bean_1047'
}, Bean{name='multiple_of_3_bean_1050'
}, Bean{name='multiple_of_3_bean_1053'
}, Bean{name='multiple_of_3_bean_1056'
}, Bean{name='multiple_of_3_bean_1059'
}, Bean{name='multiple_of_3_bean_1062'
}, Bean{name='multiple_of_3_bean_1065'
}, Bean{name='multiple_of_3_bean_1068'
}, Bean{name='multiple_of_3_bean_1071'
}, Bean{name='multiple_of_3_bean_1074'
}, Bean{name='multiple_of_3_bean_1077'
}, Bean{name='multiple_of_3_bean_1080'
}, Bean{name='multiple_of_3_bean_1083'
}, Bean{name='multiple_of_3_bean_1086'
}, Bean{name='multiple_of_3_bean_1089'
}, Bean{name='multiple_of_3_bean_1092'
}, Bean{name='multiple_of_3_bean_1095'
}, Bean{name='multiple_of_3_bean_1098'
}, Bean{name='multiple_of_3_bean_1101'
}, Bean{name='multiple_of_3_bean_1104'
}, Bean{name='multiple_of_3_bean_1107'
}, Bean{name='multiple_of_3_bean_1110'
}, Bean{name='multiple_of_3_bean_1113'
}, Bean{name='multiple_of_3_bean_1116'
}, Bean{name='multiple_of_3_bean_1119'
}, Bean{name='multiple_of_3_bean_1122'
}, Bean{name='multiple_of_3_bean_1125'
}, Bean{name='multiple_of_3_bean_1128'
}, Bean{name='multiple_of_3_bean_1131'
}, Bean{name='multiple_of_3_bean_1134'
}, Bean{name='multiple_of_3_bean_1137'
}, Bean{name='multiple_of_3_bean_1140'
}, Bean{name='multiple_of_3_bean_1143'
}, Bean{name='multiple_of_3_bean_1146'
}, Bean{name='multiple_of_3_bean_1149'
}, Bean{name='multiple_of_3_bean_1152'
}, Bean{name='multiple_of_3_bean_1155'
}, Bean{name='multiple_of_3_bean_1158'
}, Bean{name='multiple_of_3_bean_1161'
}, Bean{name='multiple_of_3_bean_1164'
}, Bean{name='multiple_of_3_bean_1167'
}, Bean{name='multiple_of_3_bean_1170'
}, Bean{name='multiple_of_3_bean_1173'
}, Bean{name='multiple_of_3_bean_1176'
}, Bean{name='multiple_of_3_bean_1179'
}, Bean{name='multiple_of_3_bean_1182'
}, Bean{name='multiple_of_3_bean_1185'
}, Bean{name='multiple_of_3_bean_1188'
}, Bean{name='multiple_of_3_bean_1191'
}, Bean{name='multiple_of_3_bean_1194'
}, Bean{name='multiple_of_3_bean_1197'
}, Bean{name='multiple_of_3_bean_1200'
}, Bean{name='multiple_of_3_bean_1203'
}, Bean{name='multiple_of_3_bean_1206'
}, Bean{name='multiple_of_3_bean_1209'
}, Bean{name='multiple_of_3_bean_1212'
}, Bean{name='multiple_of_3_bean_1215'
}, Bean{name='multiple_of_3_bean_1218'
}, Bean{name='multiple_of_3_bean_1221'
}, Bean{name='multiple_of_3_bean_1224'
}, Bean{name='multiple_of_3_bean_1227'
}, Bean{name='multiple_of_3_bean_1230'
}, Bean{name='multiple_of_3_bean_1233'
}, Bean{name='multiple_of_3_bean_1236'
}, Bean{name='multiple_of_3_bean_1239'
}, Bean{name='multiple_of_3_bean_1242'
}, Bean{name='multiple_of_3_bean_1245'
}, Bean{name='multiple_of_3_bean_1248'
}, Bean{name='multiple_of_3_bean_1251'
}, Bean{name='multiple_of_3_bean_1254'
}, Bean{name='multiple_of_3_bean_1257'
}, Bean{name='multiple_of_3_bean_1260'
}, Bean{name='multiple_of_3_bean_1263'
}, Bean{name='multiple_of_3_bean_1266'
}, Bean{name='multiple_of_3_bean_1269'
}, Bean{name='multiple_of_3_bean_1272'
}, Bean{name='multiple_of_3_bean_1275'
}, Bean{name='multiple_of_3_bean_1278'
}, Bean{name='multiple_of_3_bean_1281'
}, Bean{name='multiple_of_3_bean_1284'
}, Bean{name='multiple_of_3_bean_1287'
}, Bean{name='multiple_of_3_bean_1290'
}, Bean{name='multiple_of_3_bean_1293'
}, Bean{name='multiple_of_3_bean_1296'
}, Bean{name='multiple_of_3_bean_1299'
}, Bean{name='multiple_of_3_bean_1302'
}, Bean{name='multiple_of_3_bean_1305'
}, Bean{name='multiple_of_3_bean_1308'
}, Bean{name='multiple_of_3_bean_1311'
}, Bean{name='multiple_of_3_bean_1314'
}, Bean{name='multiple_of_3_bean_1317'
}, Bean{na2019-01-14 23:26:43.836 7980-7980/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: calculateDiff cost 9ms.2019-01-14 23:26:43.837 7980-7980/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: added: [Bean{name='bean_10000'
}, Bean{name='bean_10001'
}, Bean{name='bean_10002'
}, Bean{name='bean_10003'
}, Bean{name='bean_10004'
}, Bean{name='bean_10005'
}, Bean{name='bean_10006'
}, Bean{name='bean_10007'
}, Bean{name='bean_10008'
}, Bean{name='bean_10009'
}, Bean{name='bean_10010'
}, Bean{name='bean_10011'
}, Bean{name='bean_10012'
}, Bean{name='bean_10013'
}, Bean{name='bean_10014'
}, Bean{name='bean_10015'
}, Bean{name='bean_10016'
}, Bean{name='bean_10017'
}, Bean{name='bean_10018'
}, Bean{name='bean_10019'
}, Bean{name='bean_10020'
}, Bean{name='bean_10021'
}, Bean{name='bean_10022'
}, Bean{name='bean_10023'
}, Bean{name='bean_10024'
}, Bean{name='bean_10025'
}, Bean{name='bean_10026'
}, Bean{name='bean_10027'
}, Bean{name='bean_10028'
}, Bean{name='bean_10029'
}, Bean{name='bean_10030'
}, Bean{name='bean_10031'
}, Bean{name='bean_10032'
}, Bean{name='bean_10033'
}, Bean{name='bean_10034'
}, Bean{name='bean_10035'
}, Bean{name='bean_10036'
}, Bean{name='bean_10037'
}, Bean{name='bean_10038'
}, Bean{name='bean_10039'
}, Bean{name='bean_10040'
}, Bean{name='bean_10041'
}, Bean{name='bean_10042'
}, Bean{name='bean_10043'
}, Bean{name='bean_10044'
}, Bean{name='bean_10045'
}, Bean{name='bean_10046'
}, Bean{name='bean_10047'
}, Bean{name='bean_10048'
}, Bean{name='bean_10049'
}, Bean{name='bean_10050'
}, Bean{name='bean_10051'
}, Bean{name='bean_10052'
}, Bean{name='bean_10053'
}, Bean{name='bean_10054'
}, Bean{name='bean_10055'
}, Bean{name='bean_10056'
}, Bean{name='bean_10057'
}, Bean{name='bean_10058'
}, Bean{name='bean_10059'
}, Bean{name='bean_10060'
}, Bean{name='bean_10061'
}, Bean{name='bean_10062'
}, Bean{name='bean_10063'
}, Bean{name='bean_10064'
}, Bean{name='bean_10065'
}, Bean{name='bean_10066'
}, Bean{name='bean_10067'
}, Bean{name='bean_10068'
}, Bean{name='bean_10069'
}, Bean{name='bean_10070'
}, Bean{name='bean_10071'
}, Bean{name='bean_10072'
}, Bean{name='bean_10073'
}, Bean{name='bean_10074'
}, Bean{name='bean_10075'
}, Bean{name='bean_10076'
}, Bean{name='bean_10077'
}, Bean{name='bean_10078'
}, Bean{name='bean_10079'
}, Bean{name='bean_10080'
}, Bean{name='bean_10081'
}, Bean{name='bean_10082'
}, Bean{name='bean_10083'
}, Bean{name='bean_10084'
}, Bean{name='bean_10085'
}, Bean{name='bean_10086'
}, Bean{name='bean_10087'
}, Bean{name='bean_10088'
}, Bean{name='bean_10089'
}, Bean{name='bean_10090'
}, Bean{name='bean_10091'
}, Bean{name='bean_10092'
}, Bean{name='bean_10093'
}, Bean{name='bean_10094'
}, Bean{name='bean_10095'
}, Bean{name='bean_10096'
}, Bean{name='bean_10097'
}, Bean{name='bean_10098'
}, Bean{name='bean_10099'
}, Bean{name='bean_10100'
}, Bean{name='bean_10101'
}, Bean{name='bean_10102'
}, Bean{name='bean_10103'
}, Bean{name='bean_10104'
}, Bean{name='bean_10105'
}, Bean{name='bean_10106'
}, Bean{name='bean_10107'
}, Bean{name='bean_10108'
}, Bean{name='bean_10109'
}, Bean{name='bean_10110'
}, Bean{name='bean_10111'
}, Bean{name='bean_10112'
}, Bean{name='bean_10113'
}, Bean{name='bean_10114'
}, Bean{name='bean_10115'
}, Bean{name='bean_10116'
}, Bean{name='bean_10117'
}, Bean{name='bean_10118'
}, Bean{name='bean_10119'
}, Bean{name='bean_10120'
}, Bean{name='bean_10121'
}, Bean{name='bean_10122'
}, Bean{name='bean_10123'
}, Bean{name='bean_10124'
}, Bean{name='bean_10125'
}, Bean{name='bean_10126'
}, Bean{name='bean_10127'
}, Bean{name='bean_10128'
}, Bean{name='bean_10129'
}, Bean{name='bean_10130'
}, Bean{name='bean_10131'
}, Bean{name='bean_10132'
}, Bean{name='bean_10133'
}, Bean{name='bean_10134'
}, Bean{name='bean_10135'
}, Bean{name='bean_10136'
}, Bean{name='bean_10137'
}, Bean{name='bean_10138'
}, Bean{name='bean_10139'
}, Bean{name='bean_10140'
}, Bean{name='bean_10141'
}, Bean{name='bean_10142'
}, Bean{name='bean_10143'
}, Bean{name='bean_10144'
}, Bean{name='bean_10145'
}, Bean{name='bean_10146'
}, Bean{name='bean_10147'
}, Bean{name='bean_10148'
}, Bean{name='bean_10149'
}, Bean{name='bean_10150'
}, Bean{name='bean_10151'
}, Bean{name='bean_10152'
}, Bean{name='bean_10153'
}, Bean{name='bean_10154'
}, Bean{name='bean_10155'
}, Bean{name='bean_10156'
}, Bean{name='bean_10157'
}, Bean{name='bean_10158'
}, Bean{name='bean_10159'
}, Bean{name='bean_10160'
}, Bean{name='2019-01-14 23:26:43.837 7980-7980/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: deleted: [Bean{name='bean_0'
}, Bean{name='bean_2'
}, Bean{name='bean_4'
}, Bean{name='bean_6'
}, Bean{name='bean_8'
}, Bean{name='bean_10'
}, Bean{name='bean_12'
}, Bean{name='bean_14'
}, Bean{name='bean_16'
}, Bean{name='bean_18'
}, Bean{name='bean_20'
}, Bean{name='bean_22'
}, Bean{name='bean_24'
}, Bean{name='bean_26'
}, Bean{name='bean_28'
}, Bean{name='bean_30'
}, Bean{name='bean_32'
}, Bean{name='bean_34'
}, Bean{name='bean_36'
}, Bean{name='bean_38'
}, Bean{name='bean_40'
}, Bean{name='bean_42'
}, Bean{name='bean_44'
}, Bean{name='bean_46'
}, Bean{name='bean_48'
}, Bean{name='bean_50'
}, Bean{name='bean_52'
}, Bean{name='bean_54'
}, Bean{name='bean_56'
}, Bean{name='bean_58'
}, Bean{name='bean_60'
}, Bean{name='bean_62'
}, Bean{name='bean_64'
}, Bean{name='bean_66'
}, Bean{name='bean_68'
}, Bean{name='bean_70'
}, Bean{name='bean_72'
}, Bean{name='bean_74'
}, Bean{name='bean_76'
}, Bean{name='bean_78'
}, Bean{name='bean_80'
}, Bean{name='bean_82'
}, Bean{name='bean_84'
}, Bean{name='bean_86'
}, Bean{name='bean_88'
}, Bean{name='bean_90'
}, Bean{name='bean_92'
}, Bean{name='bean_94'
}, Bean{name='bean_96'
}, Bean{name='bean_98'
}, Bean{name='bean_100'
}, Bean{name='bean_102'
}, Bean{name='bean_104'
}, Bean{name='bean_106'
}, Bean{name='bean_108'
}, Bean{name='bean_110'
}, Bean{name='bean_112'
}, Bean{name='bean_114'
}, Bean{name='bean_116'
}, Bean{name='bean_118'
}, Bean{name='bean_120'
}, Bean{name='bean_122'
}, Bean{name='bean_124'
}, Bean{name='bean_126'
}, Bean{name='bean_128'
}, Bean{name='bean_130'
}, Bean{name='bean_132'
}, Bean{name='bean_134'
}, Bean{name='bean_136'
}, Bean{name='bean_138'
}, Bean{name='bean_140'
}, Bean{name='bean_142'
}, Bean{name='bean_144'
}, Bean{name='bean_146'
}, Bean{name='bean_148'
}, Bean{name='bean_150'
}, Bean{name='bean_152'
}, Bean{name='bean_154'
}, Bean{name='bean_156'
}, Bean{name='bean_158'
}, Bean{name='bean_160'
}, Bean{name='bean_162'
}, Bean{name='bean_164'
}, Bean{name='bean_166'
}, Bean{name='bean_168'
}, Bean{name='bean_170'
}, Bean{name='bean_172'
}, Bean{name='bean_174'
}, Bean{name='bean_176'
}, Bean{name='bean_178'
}, Bean{name='bean_180'
}, Bean{name='bean_182'
}, Bean{name='bean_184'
}, Bean{name='bean_186'
}, Bean{name='bean_188'
}, Bean{name='bean_190'
}, Bean{name='bean_192'
}, Bean{name='bean_194'
}, Bean{name='bean_196'
}, Bean{name='bean_198'
}, Bean{name='bean_200'
}, Bean{name='bean_202'
}, Bean{name='bean_204'
}, Bean{name='bean_206'
}, Bean{name='bean_208'
}, Bean{name='bean_210'
}, Bean{name='bean_212'
}, Bean{name='bean_214'
}, Bean{name='bean_216'
}, Bean{name='bean_218'
}, Bean{name='bean_220'
}, Bean{name='bean_222'
}, Bean{name='bean_224'
}, Bean{name='bean_226'
}, Bean{name='bean_228'
}, Bean{name='bean_230'
}, Bean{name='bean_232'
}, Bean{name='bean_234'
}, Bean{name='bean_236'
}, Bean{name='bean_238'
}, Bean{name='bean_240'
}, Bean{name='bean_242'
}, Bean{name='bean_244'
}, Bean{name='bean_246'
}, Bean{name='bean_248'
}, Bean{name='bean_250'
}, Bean{name='bean_252'
}, Bean{name='bean_254'
}, Bean{name='bean_256'
}, Bean{name='bean_258'
}, Bean{name='bean_260'
}, Bean{name='bean_262'
}, Bean{name='bean_264'
}, Bean{name='bean_266'
}, Bean{name='bean_268'
}, Bean{name='bean_270'
}, Bean{name='bean_272'
}, Bean{name='bean_274'
}, Bean{name='bean_276'
}, Bean{name='bean_278'
}, Bean{name='bean_280'
}, Bean{name='bean_282'
}, Bean{name='bean_284'
}, Bean{name='bean_286'
}, Bean{name='bean_288'
}, Bean{name='bean_290'
}, Bean{name='bean_292'
}, Bean{name='bean_294'
}, Bean{name='bean_296'
}, Bean{name='bean_298'
}, Bean{name='bean_300'
}, Bean{name='bean_302'
}, Bean{name='bean_304'
}, Bean{name='bean_306'
}, Bean{name='bean_308'
}, Bean{name='bean_310'
}, Bean{name='bean_312'
}, Bean{name='bean_314'
}, Bean{name='bean_316'
}, Bean{name='bean_318'
}, Bean{name='bean_320'
}, Bean{name='bean_322'
}, Bean{name='bean_324'
}, Bean{name='bean_326'
}, Bean{name='bean_328'
}, Bean{name='bean_330'
}, Bean{name='bean_332'
}, Bean{name='bean_334'
}, Bean{name='bean_336'
}, Bean{name='bean_338'
}, Bean{name='bean_340'
}, Bean{name='bean_342'
}, Bean{name='bean_344'
}, Bean{name='bean_346'
}, Bean{name='bean_348'
}, Bean{name='bean_350'
}, Bean{name='bean_352'
}, Bean{name='bean_352019-01-14 23:26:43.838 7980-7980/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: updated: [Bean{name='multiple_of_3_bean_1002'
}, Bean{name='multiple_of_3_bean_1005'
}, Bean{name='multiple_of_3_bean_1008'
}, Bean{name='multiple_of_3_bean_1011'
}, Bean{name='multiple_of_3_bean_1014'
}, Bean{name='multiple_of_3_bean_1017'
}, Bean{name='multiple_of_3_bean_1020'
}, Bean{name='multiple_of_3_bean_1023'
}, Bean{name='multiple_of_3_bean_1026'
}, Bean{name='multiple_of_3_bean_1029'
}, Bean{name='multiple_of_3_bean_1032'
}, Bean{name='multiple_of_3_bean_1035'
}, Bean{name='multiple_of_3_bean_1038'
}, Bean{name='multiple_of_3_bean_1041'
}, Bean{name='multiple_of_3_bean_1044'
}, Bean{name='multiple_of_3_bean_1047'
}, Bean{name='multiple_of_3_bean_1050'
}, Bean{name='multiple_of_3_bean_1053'
}, Bean{name='multiple_of_3_bean_1056'
}, Bean{name='multiple_of_3_bean_1059'
}, Bean{name='multiple_of_3_bean_1062'
}, Bean{name='multiple_of_3_bean_1065'
}, Bean{name='multiple_of_3_bean_1068'
}, Bean{name='multiple_of_3_bean_1071'
}, Bean{name='multiple_of_3_bean_1074'
}, Bean{name='multiple_of_3_bean_1077'
}, Bean{name='multiple_of_3_bean_1080'
}, Bean{name='multiple_of_3_bean_1083'
}, Bean{name='multiple_of_3_bean_1086'
}, Bean{name='multiple_of_3_bean_1089'
}, Bean{name='multiple_of_3_bean_1092'
}, Bean{name='multiple_of_3_bean_1095'
}, Bean{name='multiple_of_3_bean_1098'
}, Bean{name='multiple_of_3_bean_1101'
}, Bean{name='multiple_of_3_bean_1104'
}, Bean{name='multiple_of_3_bean_1107'
}, Bean{name='multiple_of_3_bean_1110'
}, Bean{name='multiple_of_3_bean_1113'
}, Bean{name='multiple_of_3_bean_1116'
}, Bean{name='multiple_of_3_bean_1119'
}, Bean{name='multiple_of_3_bean_1122'
}, Bean{name='multiple_of_3_bean_1125'
}, Bean{name='multiple_of_3_bean_1128'
}, Bean{name='multiple_of_3_bean_1131'
}, Bean{name='multiple_of_3_bean_1134'
}, Bean{name='multiple_of_3_bean_1137'
}, Bean{name='multiple_of_3_bean_1140'
}, Bean{name='multiple_of_3_bean_1143'
}, Bean{name='multiple_of_3_bean_1146'
}, Bean{name='multiple_of_3_bean_1149'
}, Bean{name='multiple_of_3_bean_1152'
}, Bean{name='multiple_of_3_bean_1155'
}, Bean{name='multiple_of_3_bean_1158'
}, Bean{name='multiple_of_3_bean_1161'
}, Bean{name='multiple_of_3_bean_1164'
}, Bean{name='multiple_of_3_bean_1167'
}, Bean{name='multiple_of_3_bean_1170'
}, Bean{name='multiple_of_3_bean_1173'
}, Bean{name='multiple_of_3_bean_1176'
}, Bean{name='multiple_of_3_bean_1179'
}, Bean{name='multiple_of_3_bean_1182'
}, Bean{name='multiple_of_3_bean_1185'
}, Bean{name='multiple_of_3_bean_1188'
}, Bean{name='multiple_of_3_bean_1191'
}, Bean{name='multiple_of_3_bean_1194'
}, Bean{name='multiple_of_3_bean_1197'
}, Bean{name='multiple_of_3_bean_1200'
}, Bean{name='multiple_of_3_bean_1203'
}, Bean{name='multiple_of_3_bean_1206'
}, Bean{name='multiple_of_3_bean_1209'
}, Bean{name='multiple_of_3_bean_1212'
}, Bean{name='multiple_of_3_bean_1215'
}, Bean{name='multiple_of_3_bean_1218'
}, Bean{name='multiple_of_3_bean_1221'
}, Bean{name='multiple_of_3_bean_1224'
}, Bean{name='multiple_of_3_bean_1227'
}, Bean{name='multiple_of_3_bean_1230'
}, Bean{name='multiple_of_3_bean_1233'
}, Bean{name='multiple_of_3_bean_1236'
}, Bean{name='multiple_of_3_bean_1239'
}, Bean{name='multiple_of_3_bean_1242'
}, Bean{name='multiple_of_3_bean_1245'
}, Bean{name='multiple_of_3_bean_1248'
}, Bean{name='multiple_of_3_bean_1251'
}, Bean{name='multiple_of_3_bean_1254'
}, Bean{name='multiple_of_3_bean_1257'
}, Bean{name='multiple_of_3_bean_1260'
}, Bean{name='multiple_of_3_bean_1263'
}, Bean{name='multiple_of_3_bean_1266'
}, Bean{name='multiple_of_3_bean_1269'
}, Bean{name='multiple_of_3_bean_1272'
}, Bean{name='multiple_of_3_bean_1275'
}, Bean{name='multiple_of_3_bean_1278'
}, Bean{name='multiple_of_3_bean_1281'
}, Bean{name='multiple_of_3_bean_1284'
}, Bean{name='multiple_of_3_bean_1287'
}, Bean{name='multiple_of_3_bean_1290'
}, Bean{name='multiple_of_3_bean_1293'
}, Bean{name='multiple_of_3_bean_1296'
}, Bean{name='multiple_of_3_bean_1299'
}, Bean{name='multiple_of_3_bean_1302'
}, Bean{name='multiple_of_3_bean_1305'
}, Bean{name='multiple_of_3_bean_1308'
}, Bean{name='multiple_of_3_bean_1311'
}, Bean{name='multiple_of_3_bean_1314'
}, Bean{name='multiple_of_3_bean_1317'
}, Bean{n複製程式碼
雖然每次測試所得的具體耗時都不一樣,但基本上要比筆者實現的演算法要快上 3ms。
資料量為 10 萬時(ArrayMap):
2019-01-14 23:33:07.949 9015-9015/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: calculateDiff cost 118ms.2019-01-14 23:33:07.951 9015-9015/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: added: [Bean{name='bean_100000'
}, Bean{name='bean_100001'
}, Bean{name='bean_100002'
}, Bean{name='bean_100003'
}, Bean{name='bean_100004'
}, Bean{name='bean_100005'
}, Bean{name='bean_100006'
}, Bean{name='bean_100007'
}, Bean{name='bean_100008'
}, Bean{name='bean_100009'
}, Bean{name='bean_100010'
}, Bean{name='bean_100011'
}, Bean{name='bean_100012'
}, Bean{name='bean_100013'
}, Bean{name='bean_100014'
}, Bean{name='bean_100015'
}, Bean{name='bean_100016'
}, Bean{name='bean_100017'
}, Bean{name='bean_100018'
}, Bean{name='bean_100019'
}, Bean{name='bean_100020'
}, Bean{name='bean_100021'
}, Bean{name='bean_100022'
}, Bean{name='bean_100023'
}, Bean{name='bean_100024'
}, Bean{name='bean_100025'
}, Bean{name='bean_100026'
}, Bean{name='bean_100027'
}, Bean{name='bean_100028'
}, Bean{name='bean_100029'
}, Bean{name='bean_100030'
}, Bean{name='bean_100031'
}, Bean{name='bean_100032'
}, Bean{name='bean_100033'
}, Bean{name='bean_100034'
}, Bean{name='bean_100035'
}, Bean{name='bean_100036'
}, Bean{name='bean_100037'
}, Bean{name='bean_100038'
}, Bean{name='bean_100039'
}, Bean{name='bean_100040'
}, Bean{name='bean_100041'
}, Bean{name='bean_100042'
}, Bean{name='bean_100043'
}, Bean{name='bean_100044'
}, Bean{name='bean_100045'
}, Bean{name='bean_100046'
}, Bean{name='bean_100047'
}, Bean{name='bean_100048'
}, Bean{name='bean_100049'
}, Bean{name='bean_100050'
}, Bean{name='bean_100051'
}, Bean{name='bean_100052'
}, Bean{name='bean_100053'
}, Bean{name='bean_100054'
}, Bean{name='bean_100055'
}, Bean{name='bean_100056'
}, Bean{name='bean_100057'
}, Bean{name='bean_100058'
}, Bean{name='bean_100059'
}, Bean{name='bean_100060'
}, Bean{name='bean_100061'
}, Bean{name='bean_100062'
}, Bean{name='bean_100063'
}, Bean{name='bean_100064'
}, Bean{name='bean_100065'
}, Bean{name='bean_100066'
}, Bean{name='bean_100067'
}, Bean{name='bean_100068'
}, Bean{name='bean_100069'
}, Bean{name='bean_100070'
}, Bean{name='bean_100071'
}, Bean{name='bean_100072'
}, Bean{name='bean_100073'
}, Bean{name='bean_100074'
}, Bean{name='bean_100075'
}, Bean{name='bean_100076'
}, Bean{name='bean_100077'
}, Bean{name='bean_100078'
}, Bean{name='bean_100079'
}, Bean{name='bean_100080'
}, Bean{name='bean_100081'
}, Bean{name='bean_100082'
}, Bean{name='bean_100083'
}, Bean{name='bean_100084'
}, Bean{name='bean_100085'
}, Bean{name='bean_100086'
}, Bean{name='bean_100087'
}, Bean{name='bean_100088'
}, Bean{name='bean_100089'
}, Bean{name='bean_100090'
}, Bean{name='bean_100091'
}, Bean{name='bean_100092'
}, Bean{name='bean_100093'
}, Bean{name='bean_100094'
}, Bean{name='bean_100095'
}, Bean{name='bean_100096'
}, Bean{name='bean_100097'
}, Bean{name='bean_100098'
}, Bean{name='bean_100099'
}, Bean{name='bean_100100'
}, Bean{name='bean_100101'
}, Bean{name='bean_100102'
}, Bean{name='bean_100103'
}, Bean{name='bean_100104'
}, Bean{name='bean_100105'
}, Bean{name='bean_100106'
}, Bean{name='bean_100107'
}, Bean{name='bean_100108'
}, Bean{name='bean_100109'
}, Bean{name='bean_100110'
}, Bean{name='bean_100111'
}, Bean{name='bean_100112'
}, Bean{name='bean_100113'
}, Bean{name='bean_100114'
}, Bean{name='bean_100115'
}, Bean{name='bean_100116'
}, Bean{name='bean_100117'
}, Bean{name='bean_100118'
}, Bean{name='bean_100119'
}, Bean{name='bean_100120'
}, Bean{name='bean_100121'
}, Bean{name='bean_100122'
}, Bean{name='bean_100123'
}, Bean{name='bean_100124'
}, Bean{name='bean_100125'
}, Bean{name='bean_100126'
}, Bean{name='bean_100127'
}, Bean{name='bean_100128'
}, Bean{name='bean_100129'
}, Bean{name='bean_100130'
}, Bean{name='bean_100131'
}, Bean{name='bean_100132'
}, Bean{name='bean_100133'
}, Bean{name='bean_100134'
}, Bean{name='bean_100135'
}, Bean{name='bean_100136'
}, Bean{name='bean_100137'
}, Bean{name='bean_100138'
}, Bean{name='bean_100139'
}, Bean{name='bean_100140'
}, Bean{name='bean_100141'
}, Bean{name='bean_100142'
}, Bean{name='bean_100143'
}, Bean{name='bean_100144'
}, Bean{name='bean_100145'
}, Bean{name='bean_100146'
}, Bean{name='bean_100147'
}, Bean{name='bean_100148'
}, Bean{name='bean_100149'
}, Bean{name='bean_100150'
}, Bean{name='bean_100151'
}, Bean{name='bean_100152'
}, Bean{name='bean_100153'
}, Bean{name='bean_100154'
}, Bean{na2019-01-14 23:33:07.951 9015-9015/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: deleted: [Bean{name='bean_0'
}, Bean{name='bean_2'
}, Bean{name='bean_4'
}, Bean{name='bean_6'
}, Bean{name='bean_8'
}, Bean{name='bean_10'
}, Bean{name='bean_12'
}, Bean{name='bean_14'
}, Bean{name='bean_16'
}, Bean{name='bean_18'
}, Bean{name='bean_20'
}, Bean{name='bean_22'
}, Bean{name='bean_24'
}, Bean{name='bean_26'
}, Bean{name='bean_28'
}, Bean{name='bean_30'
}, Bean{name='bean_32'
}, Bean{name='bean_34'
}, Bean{name='bean_36'
}, Bean{name='bean_38'
}, Bean{name='bean_40'
}, Bean{name='bean_42'
}, Bean{name='bean_44'
}, Bean{name='bean_46'
}, Bean{name='bean_48'
}, Bean{name='bean_50'
}, Bean{name='bean_52'
}, Bean{name='bean_54'
}, Bean{name='bean_56'
}, Bean{name='bean_58'
}, Bean{name='bean_60'
}, Bean{name='bean_62'
}, Bean{name='bean_64'
}, Bean{name='bean_66'
}, Bean{name='bean_68'
}, Bean{name='bean_70'
}, Bean{name='bean_72'
}, Bean{name='bean_74'
}, Bean{name='bean_76'
}, Bean{name='bean_78'
}, Bean{name='bean_80'
}, Bean{name='bean_82'
}, Bean{name='bean_84'
}, Bean{name='bean_86'
}, Bean{name='bean_88'
}, Bean{name='bean_90'
}, Bean{name='bean_92'
}, Bean{name='bean_94'
}, Bean{name='bean_96'
}, Bean{name='bean_98'
}, Bean{name='bean_100'
}, Bean{name='bean_102'
}, Bean{name='bean_104'
}, Bean{name='bean_106'
}, Bean{name='bean_108'
}, Bean{name='bean_110'
}, Bean{name='bean_112'
}, Bean{name='bean_114'
}, Bean{name='bean_116'
}, Bean{name='bean_118'
}, Bean{name='bean_120'
}, Bean{name='bean_122'
}, Bean{name='bean_124'
}, Bean{name='bean_126'
}, Bean{name='bean_128'
}, Bean{name='bean_130'
}, Bean{name='bean_132'
}, Bean{name='bean_134'
}, Bean{name='bean_136'
}, Bean{name='bean_138'
}, Bean{name='bean_140'
}, Bean{name='bean_142'
}, Bean{name='bean_144'
}, Bean{name='bean_146'
}, Bean{name='bean_148'
}, Bean{name='bean_150'
}, Bean{name='bean_152'
}, Bean{name='bean_154'
}, Bean{name='bean_156'
}, Bean{name='bean_158'
}, Bean{name='bean_160'
}, Bean{name='bean_162'
}, Bean{name='bean_164'
}, Bean{name='bean_166'
}, Bean{name='bean_168'
}, Bean{name='bean_170'
}, Bean{name='bean_172'
}, Bean{name='bean_174'
}, Bean{name='bean_176'
}, Bean{name='bean_178'
}, Bean{name='bean_180'
}, Bean{name='bean_182'
}, Bean{name='bean_184'
}, Bean{name='bean_186'
}, Bean{name='bean_188'
}, Bean{name='bean_190'
}, Bean{name='bean_192'
}, Bean{name='bean_194'
}, Bean{name='bean_196'
}, Bean{name='bean_198'
}, Bean{name='bean_200'
}, Bean{name='bean_202'
}, Bean{name='bean_204'
}, Bean{name='bean_206'
}, Bean{name='bean_208'
}, Bean{name='bean_210'
}, Bean{name='bean_212'
}, Bean{name='bean_214'
}, Bean{name='bean_216'
}, Bean{name='bean_218'
}, Bean{name='bean_220'
}, Bean{name='bean_222'
}, Bean{name='bean_224'
}, Bean{name='bean_226'
}, Bean{name='bean_228'
}, Bean{name='bean_230'
}, Bean{name='bean_232'
}, Bean{name='bean_234'
}, Bean{name='bean_236'
}, Bean{name='bean_238'
}, Bean{name='bean_240'
}, Bean{name='bean_242'
}, Bean{name='bean_244'
}, Bean{name='bean_246'
}, Bean{name='bean_248'
}, Bean{name='bean_250'
}, Bean{name='bean_252'
}, Bean{name='bean_254'
}, Bean{name='bean_256'
}, Bean{name='bean_258'
}, Bean{name='bean_260'
}, Bean{name='bean_262'
}, Bean{name='bean_264'
}, Bean{name='bean_266'
}, Bean{name='bean_268'
}, Bean{name='bean_270'
}, Bean{name='bean_272'
}, Bean{name='bean_274'
}, Bean{name='bean_276'
}, Bean{name='bean_278'
}, Bean{name='bean_280'
}, Bean{name='bean_282'
}, Bean{name='bean_284'
}, Bean{name='bean_286'
}, Bean{name='bean_288'
}, Bean{name='bean_290'
}, Bean{name='bean_292'
}, Bean{name='bean_294'
}, Bean{name='bean_296'
}, Bean{name='bean_298'
}, Bean{name='bean_300'
}, Bean{name='bean_302'
}, Bean{name='bean_304'
}, Bean{name='bean_306'
}, Bean{name='bean_308'
}, Bean{name='bean_310'
}, Bean{name='bean_312'
}, Bean{name='bean_314'
}, Bean{name='bean_316'
}, Bean{name='bean_318'
}, Bean{name='bean_320'
}, Bean{name='bean_322'
}, Bean{name='bean_324'
}, Bean{name='bean_326'
}, Bean{name='bean_328'
}, Bean{name='bean_330'
}, Bean{name='bean_332'
}, Bean{name='bean_334'
}, Bean{name='bean_336'
}, Bean{name='bean_338'
}, Bean{name='bean_340'
}, Bean{name='bean_342'
}, Bean{name='bean_344'
}, Bean{name='bean_346'
}, Bean{name='bean_348'
}, Bean{name='bean_350'
}, Bean{name='bean_352'
}, Bean{name='bean_3542019-01-14 23:33:07.952 9015-9015/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: updated: [Bean{name='multiple_of_3_bean_1002'
}, Bean{name='multiple_of_3_bean_1005'
}, Bean{name='multiple_of_3_bean_1008'
}, Bean{name='multiple_of_3_bean_1011'
}, Bean{name='multiple_of_3_bean_1014'
}, Bean{name='multiple_of_3_bean_1017'
}, Bean{name='multiple_of_3_bean_1020'
}, Bean{name='multiple_of_3_bean_1023'
}, Bean{name='multiple_of_3_bean_1026'
}, Bean{name='multiple_of_3_bean_1029'
}, Bean{name='multiple_of_3_bean_1032'
}, Bean{name='multiple_of_3_bean_1035'
}, Bean{name='multiple_of_3_bean_1038'
}, Bean{name='multiple_of_3_bean_1041'
}, Bean{name='multiple_of_3_bean_1044'
}, Bean{name='multiple_of_3_bean_1047'
}, Bean{name='multiple_of_3_bean_1050'
}, Bean{name='multiple_of_3_bean_1053'
}, Bean{name='multiple_of_3_bean_1056'
}, Bean{name='multiple_of_3_bean_1059'
}, Bean{name='multiple_of_3_bean_1062'
}, Bean{name='multiple_of_3_bean_1065'
}, Bean{name='multiple_of_3_bean_1068'
}, Bean{name='multiple_of_3_bean_1071'
}, Bean{name='multiple_of_3_bean_1074'
}, Bean{name='multiple_of_3_bean_1077'
}, Bean{name='multiple_of_3_bean_1080'
}, Bean{name='multiple_of_3_bean_1083'
}, Bean{name='multiple_of_3_bean_1086'
}, Bean{name='multiple_of_3_bean_1089'
}, Bean{name='multiple_of_3_bean_1092'
}, Bean{name='multiple_of_3_bean_1095'
}, Bean{name='multiple_of_3_bean_1098'
}, Bean{name='multiple_of_3_bean_1101'
}, Bean{name='multiple_of_3_bean_1104'
}, Bean{name='multiple_of_3_bean_1107'
}, Bean{name='multiple_of_3_bean_1110'
}, Bean{name='multiple_of_3_bean_1113'
}, Bean{name='multiple_of_3_bean_1116'
}, Bean{name='multiple_of_3_bean_1119'
}, Bean{name='multiple_of_3_bean_1122'
}, Bean{name='multiple_of_3_bean_1125'
}, Bean{name='multiple_of_3_bean_1128'
}, Bean{name='multiple_of_3_bean_1131'
}, Bean{name='multiple_of_3_bean_1134'
}, Bean{name='multiple_of_3_bean_1137'
}, Bean{name='multiple_of_3_bean_1140'
}, Bean{name='multiple_of_3_bean_1143'
}, Bean{name='multiple_of_3_bean_1146'
}, Bean{name='multiple_of_3_bean_1149'
}, Bean{name='multiple_of_3_bean_1152'
}, Bean{name='multiple_of_3_bean_1155'
}, Bean{name='multiple_of_3_bean_1158'
}, Bean{name='multiple_of_3_bean_1161'
}, Bean{name='multiple_of_3_bean_1164'
}, Bean{name='multiple_of_3_bean_1167'
}, Bean{name='multiple_of_3_bean_1170'
}, Bean{name='multiple_of_3_bean_1173'
}, Bean{name='multiple_of_3_bean_1176'
}, Bean{name='multiple_of_3_bean_1179'
}, Bean{name='multiple_of_3_bean_1182'
}, Bean{name='multiple_of_3_bean_1185'
}, Bean{name='multiple_of_3_bean_1188'
}, Bean{name='multiple_of_3_bean_1191'
}, Bean{name='multiple_of_3_bean_1194'
}, Bean{name='multiple_of_3_bean_1197'
}, Bean{name='multiple_of_3_bean_1200'
}, Bean{name='multiple_of_3_bean_1203'
}, Bean{name='multiple_of_3_bean_1206'
}, Bean{name='multiple_of_3_bean_1209'
}, Bean{name='multiple_of_3_bean_1212'
}, Bean{name='multiple_of_3_bean_1215'
}, Bean{name='multiple_of_3_bean_1218'
}, Bean{name='multiple_of_3_bean_1221'
}, Bean{name='multiple_of_3_bean_1224'
}, Bean{name='multiple_of_3_bean_1227'
}, Bean{name='multiple_of_3_bean_1230'
}, Bean{name='multiple_of_3_bean_1233'
}, Bean{name='multiple_of_3_bean_1236'
}, Bean{name='multiple_of_3_bean_1239'
}, Bean{name='multiple_of_3_bean_1242'
}, Bean{name='multiple_of_3_bean_1245'
}, Bean{name='multiple_of_3_bean_1248'
}, Bean{name='multiple_of_3_bean_1251'
}, Bean{name='multiple_of_3_bean_1254'
}, Bean{name='multiple_of_3_bean_1257'
}, Bean{name='multiple_of_3_bean_1260'
}, Bean{name='multiple_of_3_bean_1263'
}, Bean{name='multiple_of_3_bean_1266'
}, Bean{name='multiple_of_3_bean_1269'
}, Bean{name='multiple_of_3_bean_1272'
}, Bean{name='multiple_of_3_bean_1275'
}, Bean{name='multiple_of_3_bean_1278'
}, Bean{name='multiple_of_3_bean_1281'
}, Bean{name='multiple_of_3_bean_1284'
}, Bean{name='multiple_of_3_bean_1287'
}, Bean{name='multiple_of_3_bean_1290'
}, Bean{name='multiple_of_3_bean_1293'
}, Bean{name='multiple_of_3_bean_1296'
}, Bean{name='multiple_of_3_bean_1299'
}, Bean{name='multiple_of_3_bean_1302'
}, Bean{name='multiple_of_3_bean_1305'
}, Bean{name='multiple_of_3_bean_1308'
}, Bean{name='multiple_of_3_bean_1311'
}, Bean{name='multiple_of_3_bean_1314'
}, Bean{name='multiple_of_3_bean_1317'
}, Bean{na2019-01-14 23:33:08.456 9015-9015/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: calculateDiff cost 86ms.2019-01-14 23:33:08.457 9015-9015/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: added: [Bean{name='bean_100000'
}, Bean{name='bean_100001'
}, Bean{name='bean_100002'
}, Bean{name='bean_100003'
}, Bean{name='bean_100004'
}, Bean{name='bean_100005'
}, Bean{name='bean_100006'
}, Bean{name='bean_100007'
}, Bean{name='bean_100008'
}, Bean{name='bean_100009'
}, Bean{name='bean_100010'
}, Bean{name='bean_100011'
}, Bean{name='bean_100012'
}, Bean{name='bean_100013'
}, Bean{name='bean_100014'
}, Bean{name='bean_100015'
}, Bean{name='bean_100016'
}, Bean{name='bean_100017'
}, Bean{name='bean_100018'
}, Bean{name='bean_100019'
}, Bean{name='bean_100020'
}, Bean{name='bean_100021'
}, Bean{name='bean_100022'
}, Bean{name='bean_100023'
}, Bean{name='bean_100024'
}, Bean{name='bean_100025'
}, Bean{name='bean_100026'
}, Bean{name='bean_100027'
}, Bean{name='bean_100028'
}, Bean{name='bean_100029'
}, Bean{name='bean_100030'
}, Bean{name='bean_100031'
}, Bean{name='bean_100032'
}, Bean{name='bean_100033'
}, Bean{name='bean_100034'
}, Bean{name='bean_100035'
}, Bean{name='bean_100036'
}, Bean{name='bean_100037'
}, Bean{name='bean_100038'
}, Bean{name='bean_100039'
}, Bean{name='bean_100040'
}, Bean{name='bean_100041'
}, Bean{name='bean_100042'
}, Bean{name='bean_100043'
}, Bean{name='bean_100044'
}, Bean{name='bean_100045'
}, Bean{name='bean_100046'
}, Bean{name='bean_100047'
}, Bean{name='bean_100048'
}, Bean{name='bean_100049'
}, Bean{name='bean_100050'
}, Bean{name='bean_100051'
}, Bean{name='bean_100052'
}, Bean{name='bean_100053'
}, Bean{name='bean_100054'
}, Bean{name='bean_100055'
}, Bean{name='bean_100056'
}, Bean{name='bean_100057'
}, Bean{name='bean_100058'
}, Bean{name='bean_100059'
}, Bean{name='bean_100060'
}, Bean{name='bean_100061'
}, Bean{name='bean_100062'
}, Bean{name='bean_100063'
}, Bean{name='bean_100064'
}, Bean{name='bean_100065'
}, Bean{name='bean_100066'
}, Bean{name='bean_100067'
}, Bean{name='bean_100068'
}, Bean{name='bean_100069'
}, Bean{name='bean_100070'
}, Bean{name='bean_100071'
}, Bean{name='bean_100072'
}, Bean{name='bean_100073'
}, Bean{name='bean_100074'
}, Bean{name='bean_100075'
}, Bean{name='bean_100076'
}, Bean{name='bean_100077'
}, Bean{name='bean_100078'
}, Bean{name='bean_100079'
}, Bean{name='bean_100080'
}, Bean{name='bean_100081'
}, Bean{name='bean_100082'
}, Bean{name='bean_100083'
}, Bean{name='bean_100084'
}, Bean{name='bean_100085'
}, Bean{name='bean_100086'
}, Bean{name='bean_100087'
}, Bean{name='bean_100088'
}, Bean{name='bean_100089'
}, Bean{name='bean_100090'
}, Bean{name='bean_100091'
}, Bean{name='bean_100092'
}, Bean{name='bean_100093'
}, Bean{name='bean_100094'
}, Bean{name='bean_100095'
}, Bean{name='bean_100096'
}, Bean{name='bean_100097'
}, Bean{name='bean_100098'
}, Bean{name='bean_100099'
}, Bean{name='bean_100100'
}, Bean{name='bean_100101'
}, Bean{name='bean_100102'
}, Bean{name='bean_100103'
}, Bean{name='bean_100104'
}, Bean{name='bean_100105'
}, Bean{name='bean_100106'
}, Bean{name='bean_100107'
}, Bean{name='bean_100108'
}, Bean{name='bean_100109'
}, Bean{name='bean_100110'
}, Bean{name='bean_100111'
}, Bean{name='bean_100112'
}, Bean{name='bean_100113'
}, Bean{name='bean_100114'
}, Bean{name='bean_100115'
}, Bean{name='bean_100116'
}, Bean{name='bean_100117'
}, Bean{name='bean_100118'
}, Bean{name='bean_100119'
}, Bean{name='bean_100120'
}, Bean{name='bean_100121'
}, Bean{name='bean_100122'
}, Bean{name='bean_100123'
}, Bean{name='bean_100124'
}, Bean{name='bean_100125'
}, Bean{name='bean_100126'
}, Bean{name='bean_100127'
}, Bean{name='bean_100128'
}, Bean{name='bean_100129'
}, Bean{name='bean_100130'
}, Bean{name='bean_100131'
}, Bean{name='bean_100132'
}, Bean{name='bean_100133'
}, Bean{name='bean_100134'
}, Bean{name='bean_100135'
}, Bean{name='bean_100136'
}, Bean{name='bean_100137'
}, Bean{name='bean_100138'
}, Bean{name='bean_100139'
}, Bean{name='bean_100140'
}, Bean{name='bean_100141'
}, Bean{name='bean_100142'
}, Bean{name='bean_100143'
}, Bean{name='bean_100144'
}, Bean{name='bean_100145'
}, Bean{name='bean_100146'
}, Bean{name='bean_100147'
}, Bean{name='bean_100148'
}, Bean{name='bean_100149'
}, Bean{name='bean_100150'
}, Bean{name='bean_100151'
}, Bean{name='bean_100152'
}, Bean{name='bean_100153'
}, Bean{name='bean_100154'
}, Bean{n2019-01-14 23:33:08.458 9015-9015/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: deleted: [Bean{name='bean_0'
}, Bean{name='bean_2'
}, Bean{name='bean_4'
}, Bean{name='bean_6'
}, Bean{name='bean_8'
}, Bean{name='bean_10'
}, Bean{name='bean_12'
}, Bean{name='bean_14'
}, Bean{name='bean_16'
}, Bean{name='bean_18'
}, Bean{name='bean_20'
}, Bean{name='bean_22'
}, Bean{name='bean_24'
}, Bean{name='bean_26'
}, Bean{name='bean_28'
}, Bean{name='bean_30'
}, Bean{name='bean_32'
}, Bean{name='bean_34'
}, Bean{name='bean_36'
}, Bean{name='bean_38'
}, Bean{name='bean_40'
}, Bean{name='bean_42'
}, Bean{name='bean_44'
}, Bean{name='bean_46'
}, Bean{name='bean_48'
}, Bean{name='bean_50'
}, Bean{name='bean_52'
}, Bean{name='bean_54'
}, Bean{name='bean_56'
}, Bean{name='bean_58'
}, Bean{name='bean_60'
}, Bean{name='bean_62'
}, Bean{name='bean_64'
}, Bean{name='bean_66'
}, Bean{name='bean_68'
}, Bean{name='bean_70'
}, Bean{name='bean_72'
}, Bean{name='bean_74'
}, Bean{name='bean_76'
}, Bean{name='bean_78'
}, Bean{name='bean_80'
}, Bean{name='bean_82'
}, Bean{name='bean_84'
}, Bean{name='bean_86'
}, Bean{name='bean_88'
}, Bean{name='bean_90'
}, Bean{name='bean_92'
}, Bean{name='bean_94'
}, Bean{name='bean_96'
}, Bean{name='bean_98'
}, Bean{name='bean_100'
}, Bean{name='bean_102'
}, Bean{name='bean_104'
}, Bean{name='bean_106'
}, Bean{name='bean_108'
}, Bean{name='bean_110'
}, Bean{name='bean_112'
}, Bean{name='bean_114'
}, Bean{name='bean_116'
}, Bean{name='bean_118'
}, Bean{name='bean_120'
}, Bean{name='bean_122'
}, Bean{name='bean_124'
}, Bean{name='bean_126'
}, Bean{name='bean_128'
}, Bean{name='bean_130'
}, Bean{name='bean_132'
}, Bean{name='bean_134'
}, Bean{name='bean_136'
}, Bean{name='bean_138'
}, Bean{name='bean_140'
}, Bean{name='bean_142'
}, Bean{name='bean_144'
}, Bean{name='bean_146'
}, Bean{name='bean_148'
}, Bean{name='bean_150'
}, Bean{name='bean_152'
}, Bean{name='bean_154'
}, Bean{name='bean_156'
}, Bean{name='bean_158'
}, Bean{name='bean_160'
}, Bean{name='bean_162'
}, Bean{name='bean_164'
}, Bean{name='bean_166'
}, Bean{name='bean_168'
}, Bean{name='bean_170'
}, Bean{name='bean_172'
}, Bean{name='bean_174'
}, Bean{name='bean_176'
}, Bean{name='bean_178'
}, Bean{name='bean_180'
}, Bean{name='bean_182'
}, Bean{name='bean_184'
}, Bean{name='bean_186'
}, Bean{name='bean_188'
}, Bean{name='bean_190'
}, Bean{name='bean_192'
}, Bean{name='bean_194'
}, Bean{name='bean_196'
}, Bean{name='bean_198'
}, Bean{name='bean_200'
}, Bean{name='bean_202'
}, Bean{name='bean_204'
}, Bean{name='bean_206'
}, Bean{name='bean_208'
}, Bean{name='bean_210'
}, Bean{name='bean_212'
}, Bean{name='bean_214'
}, Bean{name='bean_216'
}, Bean{name='bean_218'
}, Bean{name='bean_220'
}, Bean{name='bean_222'
}, Bean{name='bean_224'
}, Bean{name='bean_226'
}, Bean{name='bean_228'
}, Bean{name='bean_230'
}, Bean{name='bean_232'
}, Bean{name='bean_234'
}, Bean{name='bean_236'
}, Bean{name='bean_238'
}, Bean{name='bean_240'
}, Bean{name='bean_242'
}, Bean{name='bean_244'
}, Bean{name='bean_246'
}, Bean{name='bean_248'
}, Bean{name='bean_250'
}, Bean{name='bean_252'
}, Bean{name='bean_254'
}, Bean{name='bean_256'
}, Bean{name='bean_258'
}, Bean{name='bean_260'
}, Bean{name='bean_262'
}, Bean{name='bean_264'
}, Bean{name='bean_266'
}, Bean{name='bean_268'
}, Bean{name='bean_270'
}, Bean{name='bean_272'
}, Bean{name='bean_274'
}, Bean{name='bean_276'
}, Bean{name='bean_278'
}, Bean{name='bean_280'
}, Bean{name='bean_282'
}, Bean{name='bean_284'
}, Bean{name='bean_286'
}, Bean{name='bean_288'
}, Bean{name='bean_290'
}, Bean{name='bean_292'
}, Bean{name='bean_294'
}, Bean{name='bean_296'
}, Bean{name='bean_298'
}, Bean{name='bean_300'
}, Bean{name='bean_302'
}, Bean{name='bean_304'
}, Bean{name='bean_306'
}, Bean{name='bean_308'
}, Bean{name='bean_310'
}, Bean{name='bean_312'
}, Bean{name='bean_314'
}, Bean{name='bean_316'
}, Bean{name='bean_318'
}, Bean{name='bean_320'
}, Bean{name='bean_322'
}, Bean{name='bean_324'
}, Bean{name='bean_326'
}, Bean{name='bean_328'
}, Bean{name='bean_330'
}, Bean{name='bean_332'
}, Bean{name='bean_334'
}, Bean{name='bean_336'
}, Bean{name='bean_338'
}, Bean{name='bean_340'
}, Bean{name='bean_342'
}, Bean{name='bean_344'
}, Bean{name='bean_346'
}, Bean{name='bean_348'
}, Bean{name='bean_350'
}, Bean{name='bean_352'
}, Bean{name='bean_352019-01-14 23:33:08.458 9015-9015/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: updated: [Bean{name='multiple_of_3_bean_1002'
}, Bean{name='multiple_of_3_bean_1005'
}, Bean{name='multiple_of_3_bean_1008'
}, Bean{name='multiple_of_3_bean_1011'
}, Bean{name='multiple_of_3_bean_1014'
}, Bean{name='multiple_of_3_bean_1017'
}, Bean{name='multiple_of_3_bean_1020'
}, Bean{name='multiple_of_3_bean_1023'
}, Bean{name='multiple_of_3_bean_1026'
}, Bean{name='multiple_of_3_bean_1029'
}, Bean{name='multiple_of_3_bean_1032'
}, Bean{name='multiple_of_3_bean_1035'
}, Bean{name='multiple_of_3_bean_1038'
}, Bean{name='multiple_of_3_bean_1041'
}, Bean{name='multiple_of_3_bean_1044'
}, Bean{name='multiple_of_3_bean_1047'
}, Bean{name='multiple_of_3_bean_1050'
}, Bean{name='multiple_of_3_bean_1053'
}, Bean{name='multiple_of_3_bean_1056'
}, Bean{name='multiple_of_3_bean_1059'
}, Bean{name='multiple_of_3_bean_1062'
}, Bean{name='multiple_of_3_bean_1065'
}, Bean{name='multiple_of_3_bean_1068'
}, Bean{name='multiple_of_3_bean_1071'
}, Bean{name='multiple_of_3_bean_1074'
}, Bean{name='multiple_of_3_bean_1077'
}, Bean{name='multiple_of_3_bean_1080'
}, Bean{name='multiple_of_3_bean_1083'
}, Bean{name='multiple_of_3_bean_1086'
}, Bean{name='multiple_of_3_bean_1089'
}, Bean{name='multiple_of_3_bean_1092'
}, Bean{name='multiple_of_3_bean_1095'
}, Bean{name='multiple_of_3_bean_1098'
}, Bean{name='multiple_of_3_bean_1101'
}, Bean{name='multiple_of_3_bean_1104'
}, Bean{name='multiple_of_3_bean_1107'
}, Bean{name='multiple_of_3_bean_1110'
}, Bean{name='multiple_of_3_bean_1113'
}, Bean{name='multiple_of_3_bean_1116'
}, Bean{name='multiple_of_3_bean_1119'
}, Bean{name='multiple_of_3_bean_1122'
}, Bean{name='multiple_of_3_bean_1125'
}, Bean{name='multiple_of_3_bean_1128'
}, Bean{name='multiple_of_3_bean_1131'
}, Bean{name='multiple_of_3_bean_1134'
}, Bean{name='multiple_of_3_bean_1137'
}, Bean{name='multiple_of_3_bean_1140'
}, Bean{name='multiple_of_3_bean_1143'
}, Bean{name='multiple_of_3_bean_1146'
}, Bean{name='multiple_of_3_bean_1149'
}, Bean{name='multiple_of_3_bean_1152'
}, Bean{name='multiple_of_3_bean_1155'
}, Bean{name='multiple_of_3_bean_1158'
}, Bean{name='multiple_of_3_bean_1161'
}, Bean{name='multiple_of_3_bean_1164'
}, Bean{name='multiple_of_3_bean_1167'
}, Bean{name='multiple_of_3_bean_1170'
}, Bean{name='multiple_of_3_bean_1173'
}, Bean{name='multiple_of_3_bean_1176'
}, Bean{name='multiple_of_3_bean_1179'
}, Bean{name='multiple_of_3_bean_1182'
}, Bean{name='multiple_of_3_bean_1185'
}, Bean{name='multiple_of_3_bean_1188'
}, Bean{name='multiple_of_3_bean_1191'
}, Bean{name='multiple_of_3_bean_1194'
}, Bean{name='multiple_of_3_bean_1197'
}, Bean{name='multiple_of_3_bean_1200'
}, Bean{name='multiple_of_3_bean_1203'
}, Bean{name='multiple_of_3_bean_1206'
}, Bean{name='multiple_of_3_bean_1209'
}, Bean{name='multiple_of_3_bean_1212'
}, Bean{name='multiple_of_3_bean_1215'
}, Bean{name='multiple_of_3_bean_1218'
}, Bean{name='multiple_of_3_bean_1221'
}, Bean{name='multiple_of_3_bean_1224'
}, Bean{name='multiple_of_3_bean_1227'
}, Bean{name='multiple_of_3_bean_1230'
}, Bean{name='multiple_of_3_bean_1233'
}, Bean{name='multiple_of_3_bean_1236'
}, Bean{name='multiple_of_3_bean_1239'
}, Bean{name='multiple_of_3_bean_1242'
}, Bean{name='multiple_of_3_bean_1245'
}, Bean{name='multiple_of_3_bean_1248'
}, Bean{name='multiple_of_3_bean_1251'
}, Bean{name='multiple_of_3_bean_1254'
}, Bean{name='multiple_of_3_bean_1257'
}, Bean{name='multiple_of_3_bean_1260'
}, Bean{name='multiple_of_3_bean_1263'
}, Bean{name='multiple_of_3_bean_1266'
}, Bean{name='multiple_of_3_bean_1269'
}, Bean{name='multiple_of_3_bean_1272'
}, Bean{name='multiple_of_3_bean_1275'
}, Bean{name='multiple_of_3_bean_1278'
}, Bean{name='multiple_of_3_bean_1281'
}, Bean{name='multiple_of_3_bean_1284'
}, Bean{name='multiple_of_3_bean_1287'
}, Bean{name='multiple_of_3_bean_1290'
}, Bean{name='multiple_of_3_bean_1293'
}, Bean{name='multiple_of_3_bean_1296'
}, Bean{name='multiple_of_3_bean_1299'
}, Bean{name='multiple_of_3_bean_1302'
}, Bean{name='multiple_of_3_bean_1305'
}, Bean{name='multiple_of_3_bean_1308'
}, Bean{name='multiple_of_3_bean_1311'
}, Bean{name='multiple_of_3_bean_1314'
}, Bean{name='multiple_of_3_bean_1317'
}, Bean{n複製程式碼
這個時候,差異就比較明顯了,筆者實現的演算法直接慢了 32ms!所以,雖然 System.arraycopy() 的效率很高,但是也扛不住資料量大啊…而使用 ArrayMap 雖然多了幾次迴圈,不過都是平級別的,不影響演算法複雜度,不過 put 的時候因為要根據 hash 遍歷查詢 index,所以還是有一定的損耗。
資料量為 1 萬時(HashMap):
2019-01-14 23:53:05.509 11086-11086/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: calculateDiff cost 13ms.2019-01-14 23:53:05.510 11086-11086/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: added: [Bean{name='bean_10000'
}, Bean{name='bean_10001'
}, Bean{name='bean_10002'
}, Bean{name='bean_10003'
}, Bean{name='bean_10004'
}, Bean{name='bean_10005'
}, Bean{name='bean_10006'
}, Bean{name='bean_10007'
}, Bean{name='bean_10008'
}, Bean{name='bean_10009'
}, Bean{name='bean_10010'
}, Bean{name='bean_10011'
}, Bean{name='bean_10012'
}, Bean{name='bean_10013'
}, Bean{name='bean_10014'
}, Bean{name='bean_10015'
}, Bean{name='bean_10016'
}, Bean{name='bean_10017'
}, Bean{name='bean_10018'
}, Bean{name='bean_10019'
}, Bean{name='bean_10020'
}, Bean{name='bean_10021'
}, Bean{name='bean_10022'
}, Bean{name='bean_10023'
}, Bean{name='bean_10024'
}, Bean{name='bean_10025'
}, Bean{name='bean_10026'
}, Bean{name='bean_10027'
}, Bean{name='bean_10028'
}, Bean{name='bean_10029'
}, Bean{name='bean_10030'
}, Bean{name='bean_10031'
}, Bean{name='bean_10032'
}, Bean{name='bean_10033'
}, Bean{name='bean_10034'
}, Bean{name='bean_10035'
}, Bean{name='bean_10036'
}, Bean{name='bean_10037'
}, Bean{name='bean_10038'
}, Bean{name='bean_10039'
}, Bean{name='bean_10040'
}, Bean{name='bean_10041'
}, Bean{name='bean_10042'
}, Bean{name='bean_10043'
}, Bean{name='bean_10044'
}, Bean{name='bean_10045'
}, Bean{name='bean_10046'
}, Bean{name='bean_10047'
}, Bean{name='bean_10048'
}, Bean{name='bean_10049'
}, Bean{name='bean_10050'
}, Bean{name='bean_10051'
}, Bean{name='bean_10052'
}, Bean{name='bean_10053'
}, Bean{name='bean_10054'
}, Bean{name='bean_10055'
}, Bean{name='bean_10056'
}, Bean{name='bean_10057'
}, Bean{name='bean_10058'
}, Bean{name='bean_10059'
}, Bean{name='bean_10060'
}, Bean{name='bean_10061'
}, Bean{name='bean_10062'
}, Bean{name='bean_10063'
}, Bean{name='bean_10064'
}, Bean{name='bean_10065'
}, Bean{name='bean_10066'
}, Bean{name='bean_10067'
}, Bean{name='bean_10068'
}, Bean{name='bean_10069'
}, Bean{name='bean_10070'
}, Bean{name='bean_10071'
}, Bean{name='bean_10072'
}, Bean{name='bean_10073'
}, Bean{name='bean_10074'
}, Bean{name='bean_10075'
}, Bean{name='bean_10076'
}, Bean{name='bean_10077'
}, Bean{name='bean_10078'
}, Bean{name='bean_10079'
}, Bean{name='bean_10080'
}, Bean{name='bean_10081'
}, Bean{name='bean_10082'
}, Bean{name='bean_10083'
}, Bean{name='bean_10084'
}, Bean{name='bean_10085'
}, Bean{name='bean_10086'
}, Bean{name='bean_10087'
}, Bean{name='bean_10088'
}, Bean{name='bean_10089'
}, Bean{name='bean_10090'
}, Bean{name='bean_10091'
}, Bean{name='bean_10092'
}, Bean{name='bean_10093'
}, Bean{name='bean_10094'
}, Bean{name='bean_10095'
}, Bean{name='bean_10096'
}, Bean{name='bean_10097'
}, Bean{name='bean_10098'
}, Bean{name='bean_10099'
}, Bean{name='bean_10100'
}, Bean{name='bean_10101'
}, Bean{name='bean_10102'
}, Bean{name='bean_10103'
}, Bean{name='bean_10104'
}, Bean{name='bean_10105'
}, Bean{name='bean_10106'
}, Bean{name='bean_10107'
}, Bean{name='bean_10108'
}, Bean{name='bean_10109'
}, Bean{name='bean_10110'
}, Bean{name='bean_10111'
}, Bean{name='bean_10112'
}, Bean{name='bean_10113'
}, Bean{name='bean_10114'
}, Bean{name='bean_10115'
}, Bean{name='bean_10116'
}, Bean{name='bean_10117'
}, Bean{name='bean_10118'
}, Bean{name='bean_10119'
}, Bean{name='bean_10120'
}, Bean{name='bean_10121'
}, Bean{name='bean_10122'
}, Bean{name='bean_10123'
}, Bean{name='bean_10124'
}, Bean{name='bean_10125'
}, Bean{name='bean_10126'
}, Bean{name='bean_10127'
}, Bean{name='bean_10128'
}, Bean{name='bean_10129'
}, Bean{name='bean_10130'
}, Bean{name='bean_10131'
}, Bean{name='bean_10132'
}, Bean{name='bean_10133'
}, Bean{name='bean_10134'
}, Bean{name='bean_10135'
}, Bean{name='bean_10136'
}, Bean{name='bean_10137'
}, Bean{name='bean_10138'
}, Bean{name='bean_10139'
}, Bean{name='bean_10140'
}, Bean{name='bean_10141'
}, Bean{name='bean_10142'
}, Bean{name='bean_10143'
}, Bean{name='bean_10144'
}, Bean{name='bean_10145'
}, Bean{name='bean_10146'
}, Bean{name='bean_10147'
}, Bean{name='bean_10148'
}, Bean{name='bean_10149'
}, Bean{name='bean_10150'
}, Bean{name='bean_10151'
}, Bean{name='bean_10152'
}, Bean{name='bean_10153'
}, Bean{name='bean_10154'
}, Bean{name='bean_10155'
}, Bean{name='bean_10156'
}, Bean{name='bean_10157'
}, Bean{name='bean_10158'
}, Bean{name='bean_10159'
}, Bean{name='bean_10160'
}, Bean{name='b2019-01-14 23:53:05.511 11086-11086/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: deleted: [Bean{name='bean_0'
}, Bean{name='bean_2'
}, Bean{name='bean_4'
}, Bean{name='bean_6'
}, Bean{name='bean_8'
}, Bean{name='bean_10'
}, Bean{name='bean_12'
}, Bean{name='bean_14'
}, Bean{name='bean_16'
}, Bean{name='bean_18'
}, Bean{name='bean_20'
}, Bean{name='bean_22'
}, Bean{name='bean_24'
}, Bean{name='bean_26'
}, Bean{name='bean_28'
}, Bean{name='bean_30'
}, Bean{name='bean_32'
}, Bean{name='bean_34'
}, Bean{name='bean_36'
}, Bean{name='bean_38'
}, Bean{name='bean_40'
}, Bean{name='bean_42'
}, Bean{name='bean_44'
}, Bean{name='bean_46'
}, Bean{name='bean_48'
}, Bean{name='bean_50'
}, Bean{name='bean_52'
}, Bean{name='bean_54'
}, Bean{name='bean_56'
}, Bean{name='bean_58'
}, Bean{name='bean_60'
}, Bean{name='bean_62'
}, Bean{name='bean_64'
}, Bean{name='bean_66'
}, Bean{name='bean_68'
}, Bean{name='bean_70'
}, Bean{name='bean_72'
}, Bean{name='bean_74'
}, Bean{name='bean_76'
}, Bean{name='bean_78'
}, Bean{name='bean_80'
}, Bean{name='bean_82'
}, Bean{name='bean_84'
}, Bean{name='bean_86'
}, Bean{name='bean_88'
}, Bean{name='bean_90'
}, Bean{name='bean_92'
}, Bean{name='bean_94'
}, Bean{name='bean_96'
}, Bean{name='bean_98'
}, Bean{name='bean_100'
}, Bean{name='bean_102'
}, Bean{name='bean_104'
}, Bean{name='bean_106'
}, Bean{name='bean_108'
}, Bean{name='bean_110'
}, Bean{name='bean_112'
}, Bean{name='bean_114'
}, Bean{name='bean_116'
}, Bean{name='bean_118'
}, Bean{name='bean_120'
}, Bean{name='bean_122'
}, Bean{name='bean_124'
}, Bean{name='bean_126'
}, Bean{name='bean_128'
}, Bean{name='bean_130'
}, Bean{name='bean_132'
}, Bean{name='bean_134'
}, Bean{name='bean_136'
}, Bean{name='bean_138'
}, Bean{name='bean_140'
}, Bean{name='bean_142'
}, Bean{name='bean_144'
}, Bean{name='bean_146'
}, Bean{name='bean_148'
}, Bean{name='bean_150'
}, Bean{name='bean_152'
}, Bean{name='bean_154'
}, Bean{name='bean_156'
}, Bean{name='bean_158'
}, Bean{name='bean_160'
}, Bean{name='bean_162'
}, Bean{name='bean_164'
}, Bean{name='bean_166'
}, Bean{name='bean_168'
}, Bean{name='bean_170'
}, Bean{name='bean_172'
}, Bean{name='bean_174'
}, Bean{name='bean_176'
}, Bean{name='bean_178'
}, Bean{name='bean_180'
}, Bean{name='bean_182'
}, Bean{name='bean_184'
}, Bean{name='bean_186'
}, Bean{name='bean_188'
}, Bean{name='bean_190'
}, Bean{name='bean_192'
}, Bean{name='bean_194'
}, Bean{name='bean_196'
}, Bean{name='bean_198'
}, Bean{name='bean_200'
}, Bean{name='bean_202'
}, Bean{name='bean_204'
}, Bean{name='bean_206'
}, Bean{name='bean_208'
}, Bean{name='bean_210'
}, Bean{name='bean_212'
}, Bean{name='bean_214'
}, Bean{name='bean_216'
}, Bean{name='bean_218'
}, Bean{name='bean_220'
}, Bean{name='bean_222'
}, Bean{name='bean_224'
}, Bean{name='bean_226'
}, Bean{name='bean_228'
}, Bean{name='bean_230'
}, Bean{name='bean_232'
}, Bean{name='bean_234'
}, Bean{name='bean_236'
}, Bean{name='bean_238'
}, Bean{name='bean_240'
}, Bean{name='bean_242'
}, Bean{name='bean_244'
}, Bean{name='bean_246'
}, Bean{name='bean_248'
}, Bean{name='bean_250'
}, Bean{name='bean_252'
}, Bean{name='bean_254'
}, Bean{name='bean_256'
}, Bean{name='bean_258'
}, Bean{name='bean_260'
}, Bean{name='bean_262'
}, Bean{name='bean_264'
}, Bean{name='bean_266'
}, Bean{name='bean_268'
}, Bean{name='bean_270'
}, Bean{name='bean_272'
}, Bean{name='bean_274'
}, Bean{name='bean_276'
}, Bean{name='bean_278'
}, Bean{name='bean_280'
}, Bean{name='bean_282'
}, Bean{name='bean_284'
}, Bean{name='bean_286'
}, Bean{name='bean_288'
}, Bean{name='bean_290'
}, Bean{name='bean_292'
}, Bean{name='bean_294'
}, Bean{name='bean_296'
}, Bean{name='bean_298'
}, Bean{name='bean_300'
}, Bean{name='bean_302'
}, Bean{name='bean_304'
}, Bean{name='bean_306'
}, Bean{name='bean_308'
}, Bean{name='bean_310'
}, Bean{name='bean_312'
}, Bean{name='bean_314'
}, Bean{name='bean_316'
}, Bean{name='bean_318'
}, Bean{name='bean_320'
}, Bean{name='bean_322'
}, Bean{name='bean_324'
}, Bean{name='bean_326'
}, Bean{name='bean_328'
}, Bean{name='bean_330'
}, Bean{name='bean_332'
}, Bean{name='bean_334'
}, Bean{name='bean_336'
}, Bean{name='bean_338'
}, Bean{name='bean_340'
}, Bean{name='bean_342'
}, Bean{name='bean_344'
}, Bean{name='bean_346'
}, Bean{name='bean_348'
}, Bean{name='bean_350'
}, Bean{name='bean_352'
}, Bean{name='bean_3542019-01-14 23:53:05.512 11086-11086/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: updated: [Bean{name='multiple_of_3_bean_1002'
}, Bean{name='multiple_of_3_bean_1005'
}, Bean{name='multiple_of_3_bean_1008'
}, Bean{name='multiple_of_3_bean_1011'
}, Bean{name='multiple_of_3_bean_1014'
}, Bean{name='multiple_of_3_bean_1017'
}, Bean{name='multiple_of_3_bean_1020'
}, Bean{name='multiple_of_3_bean_1023'
}, Bean{name='multiple_of_3_bean_1026'
}, Bean{name='multiple_of_3_bean_1029'
}, Bean{name='multiple_of_3_bean_1032'
}, Bean{name='multiple_of_3_bean_1035'
}, Bean{name='multiple_of_3_bean_1038'
}, Bean{name='multiple_of_3_bean_1041'
}, Bean{name='multiple_of_3_bean_1044'
}, Bean{name='multiple_of_3_bean_1047'
}, Bean{name='multiple_of_3_bean_1050'
}, Bean{name='multiple_of_3_bean_1053'
}, Bean{name='multiple_of_3_bean_1056'
}, Bean{name='multiple_of_3_bean_1059'
}, Bean{name='multiple_of_3_bean_1062'
}, Bean{name='multiple_of_3_bean_1065'
}, Bean{name='multiple_of_3_bean_1068'
}, Bean{name='multiple_of_3_bean_1071'
}, Bean{name='multiple_of_3_bean_1074'
}, Bean{name='multiple_of_3_bean_1077'
}, Bean{name='multiple_of_3_bean_1080'
}, Bean{name='multiple_of_3_bean_1083'
}, Bean{name='multiple_of_3_bean_1086'
}, Bean{name='multiple_of_3_bean_1089'
}, Bean{name='multiple_of_3_bean_1092'
}, Bean{name='multiple_of_3_bean_1095'
}, Bean{name='multiple_of_3_bean_1098'
}, Bean{name='multiple_of_3_bean_1101'
}, Bean{name='multiple_of_3_bean_1104'
}, Bean{name='multiple_of_3_bean_1107'
}, Bean{name='multiple_of_3_bean_1110'
}, Bean{name='multiple_of_3_bean_1113'
}, Bean{name='multiple_of_3_bean_1116'
}, Bean{name='multiple_of_3_bean_1119'
}, Bean{name='multiple_of_3_bean_1122'
}, Bean{name='multiple_of_3_bean_1125'
}, Bean{name='multiple_of_3_bean_1128'
}, Bean{name='multiple_of_3_bean_1131'
}, Bean{name='multiple_of_3_bean_1134'
}, Bean{name='multiple_of_3_bean_1137'
}, Bean{name='multiple_of_3_bean_1140'
}, Bean{name='multiple_of_3_bean_1143'
}, Bean{name='multiple_of_3_bean_1146'
}, Bean{name='multiple_of_3_bean_1149'
}, Bean{name='multiple_of_3_bean_1152'
}, Bean{name='multiple_of_3_bean_1155'
}, Bean{name='multiple_of_3_bean_1158'
}, Bean{name='multiple_of_3_bean_1161'
}, Bean{name='multiple_of_3_bean_1164'
}, Bean{name='multiple_of_3_bean_1167'
}, Bean{name='multiple_of_3_bean_1170'
}, Bean{name='multiple_of_3_bean_1173'
}, Bean{name='multiple_of_3_bean_1176'
}, Bean{name='multiple_of_3_bean_1179'
}, Bean{name='multiple_of_3_bean_1182'
}, Bean{name='multiple_of_3_bean_1185'
}, Bean{name='multiple_of_3_bean_1188'
}, Bean{name='multiple_of_3_bean_1191'
}, Bean{name='multiple_of_3_bean_1194'
}, Bean{name='multiple_of_3_bean_1197'
}, Bean{name='multiple_of_3_bean_1200'
}, Bean{name='multiple_of_3_bean_1203'
}, Bean{name='multiple_of_3_bean_1206'
}, Bean{name='multiple_of_3_bean_1209'
}, Bean{name='multiple_of_3_bean_1212'
}, Bean{name='multiple_of_3_bean_1215'
}, Bean{name='multiple_of_3_bean_1218'
}, Bean{name='multiple_of_3_bean_1221'
}, Bean{name='multiple_of_3_bean_1224'
}, Bean{name='multiple_of_3_bean_1227'
}, Bean{name='multiple_of_3_bean_1230'
}, Bean{name='multiple_of_3_bean_1233'
}, Bean{name='multiple_of_3_bean_1236'
}, Bean{name='multiple_of_3_bean_1239'
}, Bean{name='multiple_of_3_bean_1242'
}, Bean{name='multiple_of_3_bean_1245'
}, Bean{name='multiple_of_3_bean_1248'
}, Bean{name='multiple_of_3_bean_1251'
}, Bean{name='multiple_of_3_bean_1254'
}, Bean{name='multiple_of_3_bean_1257'
}, Bean{name='multiple_of_3_bean_1260'
}, Bean{name='multiple_of_3_bean_1263'
}, Bean{name='multiple_of_3_bean_1266'
}, Bean{name='multiple_of_3_bean_1269'
}, Bean{name='multiple_of_3_bean_1272'
}, Bean{name='multiple_of_3_bean_1275'
}, Bean{name='multiple_of_3_bean_1278'
}, Bean{name='multiple_of_3_bean_1281'
}, Bean{name='multiple_of_3_bean_1284'
}, Bean{name='multiple_of_3_bean_1287'
}, Bean{name='multiple_of_3_bean_1290'
}, Bean{name='multiple_of_3_bean_1293'
}, Bean{name='multiple_of_3_bean_1296'
}, Bean{name='multiple_of_3_bean_1299'
}, Bean{name='multiple_of_3_bean_1302'
}, Bean{name='multiple_of_3_bean_1305'
}, Bean{name='multiple_of_3_bean_1308'
}, Bean{name='multiple_of_3_bean_1311'
}, Bean{name='multiple_of_3_bean_1314'
}, Bean{name='multiple_of_3_bean_1317'
}, Bean{na2019-01-14 23:53:05.540 11086-11086/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: calculateDiff cost 10ms.2019-01-14 23:53:05.541 11086-11086/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: added: [Bean{name='bean_10019'
}, Bean{name='bean_10018'
}, Bean{name='bean_10011'
}, Bean{name='bean_10010'
}, Bean{name='bean_10013'
}, Bean{name='bean_10012'
}, Bean{name='bean_10015'
}, Bean{name='bean_10014'
}, Bean{name='bean_10017'
}, Bean{name='bean_10016'
}, Bean{name='bean_10020'
}, Bean{name='bean_10029'
}, Bean{name='bean_10022'
}, Bean{name='bean_10021'
}, Bean{name='bean_10024'
}, Bean{name='bean_10023'
}, Bean{name='bean_10026'
}, Bean{name='bean_10025'
}, Bean{name='bean_10028'
}, Bean{name='bean_10027'
}, Bean{name='bean_10008'
}, Bean{name='bean_10007'
}, Bean{name='bean_10009'
}, Bean{name='bean_10000'
}, Bean{name='bean_10002'
}, Bean{name='bean_10001'
}, Bean{name='bean_10004'
}, Bean{name='bean_10003'
}, Bean{name='bean_10006'
}, Bean{name='bean_10005'
}, Bean{name='bean_10130'
}, Bean{name='bean_10139'
}, Bean{name='bean_10132'
}, Bean{name='bean_10131'
}, Bean{name='bean_10134'
}, Bean{name='bean_10133'
}, Bean{name='bean_10136'
}, Bean{name='bean_10135'
}, Bean{name='bean_10138'
}, Bean{name='bean_10137'
}, Bean{name='bean_10141'
}, Bean{name='bean_10140'
}, Bean{name='bean_10143'
}, Bean{name='bean_10142'
}, Bean{name='bean_10145'
}, Bean{name='bean_10144'
}, Bean{name='bean_10147'
}, Bean{name='bean_10146'
}, Bean{name='bean_10149'
}, Bean{name='bean_10148'
}, Bean{name='bean_10118'
}, Bean{name='bean_10117'
}, Bean{name='bean_10119'
}, Bean{name='bean_10110'
}, Bean{name='bean_10112'
}, Bean{name='bean_10111'
}, Bean{name='bean_10114'
}, Bean{name='bean_10113'
}, Bean{name='bean_10116'
}, Bean{name='bean_10115'
}, Bean{name='bean_10129'
}, Bean{name='bean_10128'
}, Bean{name='bean_10121'
}, Bean{name='bean_10120'
}, Bean{name='bean_10123'
}, Bean{name='bean_10122'
}, Bean{name='bean_10125'
}, Bean{name='bean_10124'
}, Bean{name='bean_10127'
}, Bean{name='bean_10126'
}, Bean{name='bean_10107'
}, Bean{name='bean_10106'
}, Bean{name='bean_10109'
}, Bean{name='bean_10108'
}, Bean{name='bean_10101'
}, Bean{name='bean_10100'
}, Bean{name='bean_10103'
}, Bean{name='bean_10102'
}, Bean{name='bean_10105'
}, Bean{name='bean_10104'
}, Bean{name='bean_10091'
}, Bean{name='bean_10090'
}, Bean{name='bean_10093'
}, Bean{name='bean_10092'
}, Bean{name='bean_10095'
}, Bean{name='bean_10094'
}, Bean{name='bean_10097'
}, Bean{name='bean_10096'
}, Bean{name='bean_10099'
}, Bean{name='bean_10098'
}, Bean{name='bean_10071'
}, Bean{name='bean_10070'
}, Bean{name='bean_10073'
}, Bean{name='bean_10072'
}, Bean{name='bean_10075'
}, Bean{name='bean_10074'
}, Bean{name='bean_10077'
}, Bean{name='bean_10076'
}, Bean{name='bean_10079'
}, Bean{name='bean_10078'
}, Bean{name='bean_10080'
}, Bean{name='bean_10082'
}, Bean{name='bean_10081'
}, Bean{name='bean_10084'
}, Bean{name='bean_10083'
}, Bean{name='bean_10086'
}, Bean{name='bean_10085'
}, Bean{name='bean_10088'
}, Bean{name='bean_10087'
}, Bean{name='bean_10089'
}, Bean{name='bean_10051'
}, Bean{name='bean_10050'
}, Bean{name='bean_10053'
}, Bean{name='bean_10052'
}, Bean{name='bean_10055'
}, Bean{name='bean_10054'
}, Bean{name='bean_10057'
}, Bean{name='bean_10056'
}, Bean{name='bean_10059'
}, Bean{name='bean_10058'
}, Bean{name='bean_10060'
}, Bean{name='bean_10062'
}, Bean{name='bean_10061'
}, Bean{name='bean_10064'
}, Bean{name='bean_10063'
}, Bean{name='bean_10066'
}, Bean{name='bean_10065'
}, Bean{name='bean_10068'
}, Bean{name='bean_10067'
}, Bean{name='bean_10069'
}, Bean{name='bean_10031'
}, Bean{name='bean_10030'
}, Bean{name='bean_10033'
}, Bean{name='bean_10032'
}, Bean{name='bean_10035'
}, Bean{name='bean_10034'
}, Bean{name='bean_10037'
}, Bean{name='bean_10036'
}, Bean{name='bean_10039'
}, Bean{name='bean_10038'
}, Bean{name='bean_10040'
}, Bean{name='bean_10042'
}, Bean{name='bean_10041'
}, Bean{name='bean_10044'
}, Bean{name='bean_10043'
}, Bean{name='bean_10046'
}, Bean{name='bean_10045'
}, Bean{name='bean_10048'
}, Bean{name='bean_10047'
}, Bean{name='bean_10049'
}, Bean{name='bean_10251'
}, Bean{name='bean_10250'
}, Bean{name='bean_10253'
}, Bean{name='bean_10252'
}, Bean{name='bean_10255'
}, Bean{name='bean_10254'
}, Bean{name='bean_10257'
}, Bean{name='bean_10256'
}, Bean{name='bean_10259'
}, Bean{name='bean_10258'
}, Bean{name='bean_10260'
}, Bean{name='2019-01-14 23:53:05.541 11086-11086/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: deleted: [Bean{name='bean_0'
}, Bean{name='bean_2'
}, Bean{name='bean_4'
}, Bean{name='bean_6'
}, Bean{name='bean_8'
}, Bean{name='bean_200'
}, Bean{name='bean_202'
}, Bean{name='bean_204'
}, Bean{name='bean_206'
}, Bean{name='bean_208'
}, Bean{name='bean_210'
}, Bean{name='bean_212'
}, Bean{name='bean_214'
}, Bean{name='bean_216'
}, Bean{name='bean_218'
}, Bean{name='bean_220'
}, Bean{name='bean_222'
}, Bean{name='bean_224'
}, Bean{name='bean_226'
}, Bean{name='bean_228'
}, Bean{name='bean_230'
}, Bean{name='bean_232'
}, Bean{name='bean_234'
}, Bean{name='bean_236'
}, Bean{name='bean_238'
}, Bean{name='bean_240'
}, Bean{name='bean_242'
}, Bean{name='bean_244'
}, Bean{name='bean_246'
}, Bean{name='bean_248'
}, Bean{name='bean_250'
}, Bean{name='bean_252'
}, Bean{name='bean_254'
}, Bean{name='bean_256'
}, Bean{name='bean_258'
}, Bean{name='bean_260'
}, Bean{name='bean_262'
}, Bean{name='bean_264'
}, Bean{name='bean_266'
}, Bean{name='bean_268'
}, Bean{name='bean_270'
}, Bean{name='bean_272'
}, Bean{name='bean_274'
}, Bean{name='bean_276'
}, Bean{name='bean_278'
}, Bean{name='bean_280'
}, Bean{name='bean_282'
}, Bean{name='bean_284'
}, Bean{name='bean_286'
}, Bean{name='bean_288'
}, Bean{name='bean_290'
}, Bean{name='bean_292'
}, Bean{name='bean_294'
}, Bean{name='bean_296'
}, Bean{name='bean_298'
}, Bean{name='bean_300'
}, Bean{name='bean_302'
}, Bean{name='bean_304'
}, Bean{name='bean_306'
}, Bean{name='bean_308'
}, Bean{name='bean_310'
}, Bean{name='bean_312'
}, Bean{name='bean_314'
}, Bean{name='bean_316'
}, Bean{name='bean_318'
}, Bean{name='bean_320'
}, Bean{name='bean_322'
}, Bean{name='bean_324'
}, Bean{name='bean_326'
}, Bean{name='bean_328'
}, Bean{name='bean_330'
}, Bean{name='bean_332'
}, Bean{name='bean_334'
}, Bean{name='bean_336'
}, Bean{name='bean_338'
}, Bean{name='bean_340'
}, Bean{name='bean_342'
}, Bean{name='bean_344'
}, Bean{name='bean_346'
}, Bean{name='bean_348'
}, Bean{name='bean_350'
}, Bean{name='bean_352'
}, Bean{name='bean_354'
}, Bean{name='bean_356'
}, Bean{name='bean_358'
}, Bean{name='bean_10'
}, Bean{name='bean_12'
}, Bean{name='bean_14'
}, Bean{name='bean_16'
}, Bean{name='bean_18'
}, Bean{name='bean_360'
}, Bean{name='bean_362'
}, Bean{name='bean_364'
}, Bean{name='bean_366'
}, Bean{name='bean_368'
}, Bean{name='bean_20'
}, Bean{name='bean_22'
}, Bean{name='bean_24'
}, Bean{name='bean_26'
}, Bean{name='bean_28'
}, Bean{name='bean_370'
}, Bean{name='bean_372'
}, Bean{name='bean_374'
}, Bean{name='bean_376'
}, Bean{name='bean_378'
}, Bean{name='bean_30'
}, Bean{name='bean_32'
}, Bean{name='bean_34'
}, Bean{name='bean_36'
}, Bean{name='bean_38'
}, Bean{name='bean_380'
}, Bean{name='bean_382'
}, Bean{name='bean_384'
}, Bean{name='bean_386'
}, Bean{name='bean_388'
}, Bean{name='bean_40'
}, Bean{name='bean_42'
}, Bean{name='bean_44'
}, Bean{name='bean_46'
}, Bean{name='bean_48'
}, Bean{name='bean_390'
}, Bean{name='bean_392'
}, Bean{name='bean_394'
}, Bean{name='bean_396'
}, Bean{name='bean_398'
}, Bean{name='bean_50'
}, Bean{name='bean_52'
}, Bean{name='bean_54'
}, Bean{name='bean_56'
}, Bean{name='bean_58'
}, Bean{name='bean_60'
}, Bean{name='bean_62'
}, Bean{name='bean_64'
}, Bean{name='bean_66'
}, Bean{name='bean_68'
}, Bean{name='bean_70'
}, Bean{name='bean_72'
}, Bean{name='bean_74'
}, Bean{name='bean_76'
}, Bean{name='bean_78'
}, Bean{name='bean_80'
}, Bean{name='bean_82'
}, Bean{name='bean_84'
}, Bean{name='bean_86'
}, Bean{name='bean_88'
}, Bean{name='bean_90'
}, Bean{name='bean_92'
}, Bean{name='bean_94'
}, Bean{name='bean_96'
}, Bean{name='bean_98'
}, Bean{name='bean_400'
}, Bean{name='bean_402'
}, Bean{name='bean_404'
}, Bean{name='bean_406'
}, Bean{name='bean_408'
}, Bean{name='bean_410'
}, Bean{name='bean_412'
}, Bean{name='bean_414'
}, Bean{name='bean_416'
}, Bean{name='bean_418'
}, Bean{name='bean_420'
}, Bean{name='bean_422'
}, Bean{name='bean_424'
}, Bean{name='bean_426'
}, Bean{name='bean_428'
}, Bean{name='bean_430'
}, Bean{name='bean_432'
}, Bean{name='bean_434'
}, Bean{name='bean_436'
}, Bean{name='bean_438'
}, Bean{name='bean_440'
}, Bean{name='bean_442'
}, Bean{name='bean_444'
}, Bean{name='bean_446'
}, Bean{name='bean_448'
}, Bean{name='bean_450'
}, Bean{name='bean_452'
}, Bean{name='bean_452019-01-14 23:53:05.542 11086-11086/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: updated: [Bean{name='multiple_of_3_bean_1011'
}, Bean{name='multiple_of_3_bean_1008'
}, Bean{name='multiple_of_3_bean_1005'
}, Bean{name='multiple_of_3_bean_1002'
}, Bean{name='multiple_of_3_bean_1020'
}, Bean{name='multiple_of_3_bean_1017'
}, Bean{name='multiple_of_3_bean_1014'
}, Bean{name='multiple_of_3_bean_1032'
}, Bean{name='multiple_of_3_bean_1029'
}, Bean{name='multiple_of_3_bean_1026'
}, Bean{name='multiple_of_3_bean_1023'
}, Bean{name='multiple_of_3_bean_1044'
}, Bean{name='multiple_of_3_bean_1041'
}, Bean{name='multiple_of_3_bean_1038'
}, Bean{name='multiple_of_3_bean_1035'
}, Bean{name='multiple_of_3_bean_1053'
}, Bean{name='multiple_of_3_bean_1050'
}, Bean{name='multiple_of_3_bean_1047'
}, Bean{name='multiple_of_3_bean_1065'
}, Bean{name='multiple_of_3_bean_1062'
}, Bean{name='multiple_of_3_bean_1059'
}, Bean{name='multiple_of_3_bean_1056'
}, Bean{name='multiple_of_3_bean_1077'
}, Bean{name='multiple_of_3_bean_1074'
}, Bean{name='multiple_of_3_bean_1071'
}, Bean{name='multiple_of_3_bean_1068'
}, Bean{name='multiple_of_3_bean_1080'
}, Bean{name='multiple_of_3_bean_1086'
}, Bean{name='multiple_of_3_bean_1083'
}, Bean{name='multiple_of_3_bean_1098'
}, Bean{name='multiple_of_3_bean_1095'
}, Bean{name='multiple_of_3_bean_1092'
}, Bean{name='multiple_of_3_bean_1089'
}, Bean{name='multiple_of_3_bean_1110'
}, Bean{name='multiple_of_3_bean_1107'
}, Bean{name='multiple_of_3_bean_1104'
}, Bean{name='multiple_of_3_bean_1101'
}, Bean{name='multiple_of_3_bean_1116'
}, Bean{name='multiple_of_3_bean_1113'
}, Bean{name='multiple_of_3_bean_1119'
}, Bean{name='multiple_of_3_bean_1131'
}, Bean{name='multiple_of_3_bean_1128'
}, Bean{name='multiple_of_3_bean_1125'
}, Bean{name='multiple_of_3_bean_1122'
}, Bean{name='multiple_of_3_bean_1143'
}, Bean{name='multiple_of_3_bean_1140'
}, Bean{name='multiple_of_3_bean_1137'
}, Bean{name='multiple_of_3_bean_1134'
}, Bean{name='multiple_of_3_bean_1152'
}, Bean{name='multiple_of_3_bean_1149'
}, Bean{name='multiple_of_3_bean_1146'
}, Bean{name='multiple_of_3_bean_1164'
}, Bean{name='multiple_of_3_bean_1161'
}, Bean{name='multiple_of_3_bean_1158'
}, Bean{name='multiple_of_3_bean_1155'
}, Bean{name='multiple_of_3_bean_1176'
}, Bean{name='multiple_of_3_bean_1173'
}, Bean{name='multiple_of_3_bean_1170'
}, Bean{name='multiple_of_3_bean_1167'
}, Bean{name='multiple_of_3_bean_1185'
}, Bean{name='multiple_of_3_bean_1182'
}, Bean{name='multiple_of_3_bean_1179'
}, Bean{name='multiple_of_3_bean_1197'
}, Bean{name='multiple_of_3_bean_1194'
}, Bean{name='multiple_of_3_bean_1191'
}, Bean{name='multiple_of_3_bean_1188'
}, Bean{name='multiple_of_3_bean_1206'
}, Bean{name='multiple_of_3_bean_1203'
}, Bean{name='multiple_of_3_bean_1200'
}, Bean{name='multiple_of_3_bean_1209'
}, Bean{name='multiple_of_3_bean_1215'
}, Bean{name='multiple_of_3_bean_1212'
}, Bean{name='multiple_of_3_bean_1218'
}, Bean{name='multiple_of_3_bean_1230'
}, Bean{name='multiple_of_3_bean_1227'
}, Bean{name='multiple_of_3_bean_1224'
}, Bean{name='multiple_of_3_bean_1221'
}, Bean{name='multiple_of_3_bean_1242'
}, Bean{name='multiple_of_3_bean_1239'
}, Bean{name='multiple_of_3_bean_1236'
}, Bean{name='multiple_of_3_bean_1233'
}, Bean{name='multiple_of_3_bean_1251'
}, Bean{name='multiple_of_3_bean_1248'
}, Bean{name='multiple_of_3_bean_1245'
}, Bean{name='multiple_of_3_bean_1263'
}, Bean{name='multiple_of_3_bean_1260'
}, Bean{name='multiple_of_3_bean_1257'
}, Bean{name='multiple_of_3_bean_1254'
}, Bean{name='multiple_of_3_bean_1275'
}, Bean{name='multiple_of_3_bean_1272'
}, Bean{name='multiple_of_3_bean_1269'
}, Bean{name='multiple_of_3_bean_1266'
}, Bean{name='multiple_of_3_bean_1284'
}, Bean{name='multiple_of_3_bean_1281'
}, Bean{name='multiple_of_3_bean_1278'
}, Bean{name='multiple_of_3_bean_1296'
}, Bean{name='multiple_of_3_bean_1293'
}, Bean{name='multiple_of_3_bean_1290'
}, Bean{name='multiple_of_3_bean_1287'
}, Bean{name='multiple_of_3_bean_1299'
}, Bean{name='multiple_of_3_bean_1305'
}, Bean{name='multiple_of_3_bean_1302'
}, Bean{name='multiple_of_3_bean_1308'
}, Bean{name='multiple_of_3_bean_1314'
}, Bean{name='multiple_of_3_bean_1311'
}, Bean{name='multiple_of_3_bean_1317'
}, Bean{n複製程式碼
資料量為 10 萬時(HashMap):
2019-01-14 23:50:59.931 10171-10171/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: calculateDiff cost 120ms.2019-01-14 23:50:59.932 10171-10171/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: added: [Bean{name='bean_100000'
}, Bean{name='bean_100001'
}, Bean{name='bean_100002'
}, Bean{name='bean_100003'
}, Bean{name='bean_100004'
}, Bean{name='bean_100005'
}, Bean{name='bean_100006'
}, Bean{name='bean_100007'
}, Bean{name='bean_100008'
}, Bean{name='bean_100009'
}, Bean{name='bean_100010'
}, Bean{name='bean_100011'
}, Bean{name='bean_100012'
}, Bean{name='bean_100013'
}, Bean{name='bean_100014'
}, Bean{name='bean_100015'
}, Bean{name='bean_100016'
}, Bean{name='bean_100017'
}, Bean{name='bean_100018'
}, Bean{name='bean_100019'
}, Bean{name='bean_100020'
}, Bean{name='bean_100021'
}, Bean{name='bean_100022'
}, Bean{name='bean_100023'
}, Bean{name='bean_100024'
}, Bean{name='bean_100025'
}, Bean{name='bean_100026'
}, Bean{name='bean_100027'
}, Bean{name='bean_100028'
}, Bean{name='bean_100029'
}, Bean{name='bean_100030'
}, Bean{name='bean_100031'
}, Bean{name='bean_100032'
}, Bean{name='bean_100033'
}, Bean{name='bean_100034'
}, Bean{name='bean_100035'
}, Bean{name='bean_100036'
}, Bean{name='bean_100037'
}, Bean{name='bean_100038'
}, Bean{name='bean_100039'
}, Bean{name='bean_100040'
}, Bean{name='bean_100041'
}, Bean{name='bean_100042'
}, Bean{name='bean_100043'
}, Bean{name='bean_100044'
}, Bean{name='bean_100045'
}, Bean{name='bean_100046'
}, Bean{name='bean_100047'
}, Bean{name='bean_100048'
}, Bean{name='bean_100049'
}, Bean{name='bean_100050'
}, Bean{name='bean_100051'
}, Bean{name='bean_100052'
}, Bean{name='bean_100053'
}, Bean{name='bean_100054'
}, Bean{name='bean_100055'
}, Bean{name='bean_100056'
}, Bean{name='bean_100057'
}, Bean{name='bean_100058'
}, Bean{name='bean_100059'
}, Bean{name='bean_100060'
}, Bean{name='bean_100061'
}, Bean{name='bean_100062'
}, Bean{name='bean_100063'
}, Bean{name='bean_100064'
}, Bean{name='bean_100065'
}, Bean{name='bean_100066'
}, Bean{name='bean_100067'
}, Bean{name='bean_100068'
}, Bean{name='bean_100069'
}, Bean{name='bean_100070'
}, Bean{name='bean_100071'
}, Bean{name='bean_100072'
}, Bean{name='bean_100073'
}, Bean{name='bean_100074'
}, Bean{name='bean_100075'
}, Bean{name='bean_100076'
}, Bean{name='bean_100077'
}, Bean{name='bean_100078'
}, Bean{name='bean_100079'
}, Bean{name='bean_100080'
}, Bean{name='bean_100081'
}, Bean{name='bean_100082'
}, Bean{name='bean_100083'
}, Bean{name='bean_100084'
}, Bean{name='bean_100085'
}, Bean{name='bean_100086'
}, Bean{name='bean_100087'
}, Bean{name='bean_100088'
}, Bean{name='bean_100089'
}, Bean{name='bean_100090'
}, Bean{name='bean_100091'
}, Bean{name='bean_100092'
}, Bean{name='bean_100093'
}, Bean{name='bean_100094'
}, Bean{name='bean_100095'
}, Bean{name='bean_100096'
}, Bean{name='bean_100097'
}, Bean{name='bean_100098'
}, Bean{name='bean_100099'
}, Bean{name='bean_100100'
}, Bean{name='bean_100101'
}, Bean{name='bean_100102'
}, Bean{name='bean_100103'
}, Bean{name='bean_100104'
}, Bean{name='bean_100105'
}, Bean{name='bean_100106'
}, Bean{name='bean_100107'
}, Bean{name='bean_100108'
}, Bean{name='bean_100109'
}, Bean{name='bean_100110'
}, Bean{name='bean_100111'
}, Bean{name='bean_100112'
}, Bean{name='bean_100113'
}, Bean{name='bean_100114'
}, Bean{name='bean_100115'
}, Bean{name='bean_100116'
}, Bean{name='bean_100117'
}, Bean{name='bean_100118'
}, Bean{name='bean_100119'
}, Bean{name='bean_100120'
}, Bean{name='bean_100121'
}, Bean{name='bean_100122'
}, Bean{name='bean_100123'
}, Bean{name='bean_100124'
}, Bean{name='bean_100125'
}, Bean{name='bean_100126'
}, Bean{name='bean_100127'
}, Bean{name='bean_100128'
}, Bean{name='bean_100129'
}, Bean{name='bean_100130'
}, Bean{name='bean_100131'
}, Bean{name='bean_100132'
}, Bean{name='bean_100133'
}, Bean{name='bean_100134'
}, Bean{name='bean_100135'
}, Bean{name='bean_100136'
}, Bean{name='bean_100137'
}, Bean{name='bean_100138'
}, Bean{name='bean_100139'
}, Bean{name='bean_100140'
}, Bean{name='bean_100141'
}, Bean{name='bean_100142'
}, Bean{name='bean_100143'
}, Bean{name='bean_100144'
}, Bean{name='bean_100145'
}, Bean{name='bean_100146'
}, Bean{name='bean_100147'
}, Bean{name='bean_100148'
}, Bean{name='bean_100149'
}, Bean{name='bean_100150'
}, Bean{name='bean_100151'
}, Bean{name='bean_100152'
}, Bean{name='bean_100153'
}, Bean{name='bean_100154'
}, Bean{na2019-01-14 23:50:59.933 10171-10171/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: deleted: [Bean{name='bean_0'
}, Bean{name='bean_2'
}, Bean{name='bean_4'
}, Bean{name='bean_6'
}, Bean{name='bean_8'
}, Bean{name='bean_10'
}, Bean{name='bean_12'
}, Bean{name='bean_14'
}, Bean{name='bean_16'
}, Bean{name='bean_18'
}, Bean{name='bean_20'
}, Bean{name='bean_22'
}, Bean{name='bean_24'
}, Bean{name='bean_26'
}, Bean{name='bean_28'
}, Bean{name='bean_30'
}, Bean{name='bean_32'
}, Bean{name='bean_34'
}, Bean{name='bean_36'
}, Bean{name='bean_38'
}, Bean{name='bean_40'
}, Bean{name='bean_42'
}, Bean{name='bean_44'
}, Bean{name='bean_46'
}, Bean{name='bean_48'
}, Bean{name='bean_50'
}, Bean{name='bean_52'
}, Bean{name='bean_54'
}, Bean{name='bean_56'
}, Bean{name='bean_58'
}, Bean{name='bean_60'
}, Bean{name='bean_62'
}, Bean{name='bean_64'
}, Bean{name='bean_66'
}, Bean{name='bean_68'
}, Bean{name='bean_70'
}, Bean{name='bean_72'
}, Bean{name='bean_74'
}, Bean{name='bean_76'
}, Bean{name='bean_78'
}, Bean{name='bean_80'
}, Bean{name='bean_82'
}, Bean{name='bean_84'
}, Bean{name='bean_86'
}, Bean{name='bean_88'
}, Bean{name='bean_90'
}, Bean{name='bean_92'
}, Bean{name='bean_94'
}, Bean{name='bean_96'
}, Bean{name='bean_98'
}, Bean{name='bean_100'
}, Bean{name='bean_102'
}, Bean{name='bean_104'
}, Bean{name='bean_106'
}, Bean{name='bean_108'
}, Bean{name='bean_110'
}, Bean{name='bean_112'
}, Bean{name='bean_114'
}, Bean{name='bean_116'
}, Bean{name='bean_118'
}, Bean{name='bean_120'
}, Bean{name='bean_122'
}, Bean{name='bean_124'
}, Bean{name='bean_126'
}, Bean{name='bean_128'
}, Bean{name='bean_130'
}, Bean{name='bean_132'
}, Bean{name='bean_134'
}, Bean{name='bean_136'
}, Bean{name='bean_138'
}, Bean{name='bean_140'
}, Bean{name='bean_142'
}, Bean{name='bean_144'
}, Bean{name='bean_146'
}, Bean{name='bean_148'
}, Bean{name='bean_150'
}, Bean{name='bean_152'
}, Bean{name='bean_154'
}, Bean{name='bean_156'
}, Bean{name='bean_158'
}, Bean{name='bean_160'
}, Bean{name='bean_162'
}, Bean{name='bean_164'
}, Bean{name='bean_166'
}, Bean{name='bean_168'
}, Bean{name='bean_170'
}, Bean{name='bean_172'
}, Bean{name='bean_174'
}, Bean{name='bean_176'
}, Bean{name='bean_178'
}, Bean{name='bean_180'
}, Bean{name='bean_182'
}, Bean{name='bean_184'
}, Bean{name='bean_186'
}, Bean{name='bean_188'
}, Bean{name='bean_190'
}, Bean{name='bean_192'
}, Bean{name='bean_194'
}, Bean{name='bean_196'
}, Bean{name='bean_198'
}, Bean{name='bean_200'
}, Bean{name='bean_202'
}, Bean{name='bean_204'
}, Bean{name='bean_206'
}, Bean{name='bean_208'
}, Bean{name='bean_210'
}, Bean{name='bean_212'
}, Bean{name='bean_214'
}, Bean{name='bean_216'
}, Bean{name='bean_218'
}, Bean{name='bean_220'
}, Bean{name='bean_222'
}, Bean{name='bean_224'
}, Bean{name='bean_226'
}, Bean{name='bean_228'
}, Bean{name='bean_230'
}, Bean{name='bean_232'
}, Bean{name='bean_234'
}, Bean{name='bean_236'
}, Bean{name='bean_238'
}, Bean{name='bean_240'
}, Bean{name='bean_242'
}, Bean{name='bean_244'
}, Bean{name='bean_246'
}, Bean{name='bean_248'
}, Bean{name='bean_250'
}, Bean{name='bean_252'
}, Bean{name='bean_254'
}, Bean{name='bean_256'
}, Bean{name='bean_258'
}, Bean{name='bean_260'
}, Bean{name='bean_262'
}, Bean{name='bean_264'
}, Bean{name='bean_266'
}, Bean{name='bean_268'
}, Bean{name='bean_270'
}, Bean{name='bean_272'
}, Bean{name='bean_274'
}, Bean{name='bean_276'
}, Bean{name='bean_278'
}, Bean{name='bean_280'
}, Bean{name='bean_282'
}, Bean{name='bean_284'
}, Bean{name='bean_286'
}, Bean{name='bean_288'
}, Bean{name='bean_290'
}, Bean{name='bean_292'
}, Bean{name='bean_294'
}, Bean{name='bean_296'
}, Bean{name='bean_298'
}, Bean{name='bean_300'
}, Bean{name='bean_302'
}, Bean{name='bean_304'
}, Bean{name='bean_306'
}, Bean{name='bean_308'
}, Bean{name='bean_310'
}, Bean{name='bean_312'
}, Bean{name='bean_314'
}, Bean{name='bean_316'
}, Bean{name='bean_318'
}, Bean{name='bean_320'
}, Bean{name='bean_322'
}, Bean{name='bean_324'
}, Bean{name='bean_326'
}, Bean{name='bean_328'
}, Bean{name='bean_330'
}, Bean{name='bean_332'
}, Bean{name='bean_334'
}, Bean{name='bean_336'
}, Bean{name='bean_338'
}, Bean{name='bean_340'
}, Bean{name='bean_342'
}, Bean{name='bean_344'
}, Bean{name='bean_346'
}, Bean{name='bean_348'
}, Bean{name='bean_350'
}, Bean{name='bean_352'
}, Bean{name='bean_3542019-01-14 23:50:59.933 10171-10171/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: updated: [Bean{name='multiple_of_3_bean_1002'
}, Bean{name='multiple_of_3_bean_1005'
}, Bean{name='multiple_of_3_bean_1008'
}, Bean{name='multiple_of_3_bean_1011'
}, Bean{name='multiple_of_3_bean_1014'
}, Bean{name='multiple_of_3_bean_1017'
}, Bean{name='multiple_of_3_bean_1020'
}, Bean{name='multiple_of_3_bean_1023'
}, Bean{name='multiple_of_3_bean_1026'
}, Bean{name='multiple_of_3_bean_1029'
}, Bean{name='multiple_of_3_bean_1032'
}, Bean{name='multiple_of_3_bean_1035'
}, Bean{name='multiple_of_3_bean_1038'
}, Bean{name='multiple_of_3_bean_1041'
}, Bean{name='multiple_of_3_bean_1044'
}, Bean{name='multiple_of_3_bean_1047'
}, Bean{name='multiple_of_3_bean_1050'
}, Bean{name='multiple_of_3_bean_1053'
}, Bean{name='multiple_of_3_bean_1056'
}, Bean{name='multiple_of_3_bean_1059'
}, Bean{name='multiple_of_3_bean_1062'
}, Bean{name='multiple_of_3_bean_1065'
}, Bean{name='multiple_of_3_bean_1068'
}, Bean{name='multiple_of_3_bean_1071'
}, Bean{name='multiple_of_3_bean_1074'
}, Bean{name='multiple_of_3_bean_1077'
}, Bean{name='multiple_of_3_bean_1080'
}, Bean{name='multiple_of_3_bean_1083'
}, Bean{name='multiple_of_3_bean_1086'
}, Bean{name='multiple_of_3_bean_1089'
}, Bean{name='multiple_of_3_bean_1092'
}, Bean{name='multiple_of_3_bean_1095'
}, Bean{name='multiple_of_3_bean_1098'
}, Bean{name='multiple_of_3_bean_1101'
}, Bean{name='multiple_of_3_bean_1104'
}, Bean{name='multiple_of_3_bean_1107'
}, Bean{name='multiple_of_3_bean_1110'
}, Bean{name='multiple_of_3_bean_1113'
}, Bean{name='multiple_of_3_bean_1116'
}, Bean{name='multiple_of_3_bean_1119'
}, Bean{name='multiple_of_3_bean_1122'
}, Bean{name='multiple_of_3_bean_1125'
}, Bean{name='multiple_of_3_bean_1128'
}, Bean{name='multiple_of_3_bean_1131'
}, Bean{name='multiple_of_3_bean_1134'
}, Bean{name='multiple_of_3_bean_1137'
}, Bean{name='multiple_of_3_bean_1140'
}, Bean{name='multiple_of_3_bean_1143'
}, Bean{name='multiple_of_3_bean_1146'
}, Bean{name='multiple_of_3_bean_1149'
}, Bean{name='multiple_of_3_bean_1152'
}, Bean{name='multiple_of_3_bean_1155'
}, Bean{name='multiple_of_3_bean_1158'
}, Bean{name='multiple_of_3_bean_1161'
}, Bean{name='multiple_of_3_bean_1164'
}, Bean{name='multiple_of_3_bean_1167'
}, Bean{name='multiple_of_3_bean_1170'
}, Bean{name='multiple_of_3_bean_1173'
}, Bean{name='multiple_of_3_bean_1176'
}, Bean{name='multiple_of_3_bean_1179'
}, Bean{name='multiple_of_3_bean_1182'
}, Bean{name='multiple_of_3_bean_1185'
}, Bean{name='multiple_of_3_bean_1188'
}, Bean{name='multiple_of_3_bean_1191'
}, Bean{name='multiple_of_3_bean_1194'
}, Bean{name='multiple_of_3_bean_1197'
}, Bean{name='multiple_of_3_bean_1200'
}, Bean{name='multiple_of_3_bean_1203'
}, Bean{name='multiple_of_3_bean_1206'
}, Bean{name='multiple_of_3_bean_1209'
}, Bean{name='multiple_of_3_bean_1212'
}, Bean{name='multiple_of_3_bean_1215'
}, Bean{name='multiple_of_3_bean_1218'
}, Bean{name='multiple_of_3_bean_1221'
}, Bean{name='multiple_of_3_bean_1224'
}, Bean{name='multiple_of_3_bean_1227'
}, Bean{name='multiple_of_3_bean_1230'
}, Bean{name='multiple_of_3_bean_1233'
}, Bean{name='multiple_of_3_bean_1236'
}, Bean{name='multiple_of_3_bean_1239'
}, Bean{name='multiple_of_3_bean_1242'
}, Bean{name='multiple_of_3_bean_1245'
}, Bean{name='multiple_of_3_bean_1248'
}, Bean{name='multiple_of_3_bean_1251'
}, Bean{name='multiple_of_3_bean_1254'
}, Bean{name='multiple_of_3_bean_1257'
}, Bean{name='multiple_of_3_bean_1260'
}, Bean{name='multiple_of_3_bean_1263'
}, Bean{name='multiple_of_3_bean_1266'
}, Bean{name='multiple_of_3_bean_1269'
}, Bean{name='multiple_of_3_bean_1272'
}, Bean{name='multiple_of_3_bean_1275'
}, Bean{name='multiple_of_3_bean_1278'
}, Bean{name='multiple_of_3_bean_1281'
}, Bean{name='multiple_of_3_bean_1284'
}, Bean{name='multiple_of_3_bean_1287'
}, Bean{name='multiple_of_3_bean_1290'
}, Bean{name='multiple_of_3_bean_1293'
}, Bean{name='multiple_of_3_bean_1296'
}, Bean{name='multiple_of_3_bean_1299'
}, Bean{name='multiple_of_3_bean_1302'
}, Bean{name='multiple_of_3_bean_1305'
}, Bean{name='multiple_of_3_bean_1308'
}, Bean{name='multiple_of_3_bean_1311'
}, Bean{name='multiple_of_3_bean_1314'
}, Bean{name='multiple_of_3_bean_1317'
}, Bean{na2019-01-14 23:51:00.161 10171-10171/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: calculateDiff cost 66ms.2019-01-14 23:51:00.162 10171-10171/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: added: [Bean{name='bean_100340'
}, Bean{name='bean_100341'
}, Bean{name='bean_100339'
}, Bean{name='bean_100331'
}, Bean{name='bean_100332'
}, Bean{name='bean_100333'
}, Bean{name='bean_100334'
}, Bean{name='bean_100335'
}, Bean{name='bean_100336'
}, Bean{name='bean_100337'
}, Bean{name='bean_100338'
}, Bean{name='bean_100350'
}, Bean{name='bean_100351'
}, Bean{name='bean_100352'
}, Bean{name='bean_100342'
}, Bean{name='bean_100343'
}, Bean{name='bean_100344'
}, Bean{name='bean_100345'
}, Bean{name='bean_100346'
}, Bean{name='bean_100347'
}, Bean{name='bean_100348'
}, Bean{name='bean_100349'
}, Bean{name='bean_100317'
}, Bean{name='bean_100318'
}, Bean{name='bean_100319'
}, Bean{name='bean_100310'
}, Bean{name='bean_100311'
}, Bean{name='bean_100312'
}, Bean{name='bean_100313'
}, Bean{name='bean_100314'
}, Bean{name='bean_100315'
}, Bean{name='bean_100316'
}, Bean{name='bean_100330'
}, Bean{name='bean_100328'
}, Bean{name='bean_100329'
}, Bean{name='bean_100320'
}, Bean{name='bean_100321'
}, Bean{name='bean_100322'
}, Bean{name='bean_100323'
}, Bean{name='bean_100324'
}, Bean{name='bean_100325'
}, Bean{name='bean_100326'
}, Bean{name='bean_100327'
}, Bean{name='bean_100380'
}, Bean{name='bean_100381'
}, Bean{name='bean_100382'
}, Bean{name='bean_100383'
}, Bean{name='bean_100384'
}, Bean{name='bean_100385'
}, Bean{name='bean_100375'
}, Bean{name='bean_100376'
}, Bean{name='bean_100377'
}, Bean{name='bean_100378'
}, Bean{name='bean_100379'
}, Bean{name='bean_100390'
}, Bean{name='bean_100391'
}, Bean{name='bean_100392'
}, Bean{name='bean_100393'
}, Bean{name='bean_100394'
}, Bean{name='bean_100395'
}, Bean{name='bean_100396'
}, Bean{name='bean_100386'
}, Bean{name='bean_100387'
}, Bean{name='bean_100388'
}, Bean{name='bean_100389'
}, Bean{name='bean_100360'
}, Bean{name='bean_100361'
}, Bean{name='bean_100362'
}, Bean{name='bean_100363'
}, Bean{name='bean_100353'
}, Bean{name='bean_100354'
}, Bean{name='bean_100355'
}, Bean{name='bean_100356'
}, Bean{name='bean_100357'
}, Bean{name='bean_100358'
}, Bean{name='bean_100359'
}, Bean{name='bean_100370'
}, Bean{name='bean_100371'
}, Bean{name='bean_100372'
}, Bean{name='bean_100373'
}, Bean{name='bean_100374'
}, Bean{name='bean_100364'
}, Bean{name='bean_100365'
}, Bean{name='bean_100366'
}, Bean{name='bean_100367'
}, Bean{name='bean_100368'
}, Bean{name='bean_100369'
}, Bean{name='bean_100397'
}, Bean{name='bean_100398'
}, Bean{name='bean_100399'
}, Bean{name='bean_100306'
}, Bean{name='bean_100307'
}, Bean{name='bean_100308'
}, Bean{name='bean_100309'
}, Bean{name='bean_100300'
}, Bean{name='bean_100301'
}, Bean{name='bean_100302'
}, Bean{name='bean_100303'
}, Bean{name='bean_100304'
}, Bean{name='bean_100305'
}, Bean{name='bean_100220'
}, Bean{name='bean_100218'
}, Bean{name='bean_100219'
}, Bean{name='bean_100210'
}, Bean{name='bean_100211'
}, Bean{name='bean_100212'
}, Bean{name='bean_100213'
}, Bean{name='bean_100214'
}, Bean{name='bean_100215'
}, Bean{name='bean_100216'
}, Bean{name='bean_100217'
}, Bean{name='bean_100230'
}, Bean{name='bean_100231'
}, Bean{name='bean_100229'
}, Bean{name='bean_100221'
}, Bean{name='bean_100222'
}, Bean{name='bean_100223'
}, Bean{name='bean_100224'
}, Bean{name='bean_100225'
}, Bean{name='bean_100226'
}, Bean{name='bean_100227'
}, Bean{name='bean_100228'
}, Bean{name='bean_100207'
}, Bean{name='bean_100208'
}, Bean{name='bean_100209'
}, Bean{name='bean_100200'
}, Bean{name='bean_100201'
}, Bean{name='bean_100202'
}, Bean{name='bean_100203'
}, Bean{name='bean_100204'
}, Bean{name='bean_100205'
}, Bean{name='bean_100206'
}, Bean{name='bean_100260'
}, Bean{name='bean_100261'
}, Bean{name='bean_100262'
}, Bean{name='bean_100263'
}, Bean{name='bean_100264'
}, Bean{name='bean_100254'
}, Bean{name='bean_100255'
}, Bean{name='bean_100256'
}, Bean{name='bean_100257'
}, Bean{name='bean_100258'
}, Bean{name='bean_100259'
}, Bean{name='bean_100270'
}, Bean{name='bean_100271'
}, Bean{name='bean_100272'
}, Bean{name='bean_100273'
}, Bean{name='bean_100274'
}, Bean{name='bean_100275'
}, Bean{name='bean_100265'
}, Bean{name='bean_100266'
}, Bean{name='bean_100267'
}, Bean{name='bean_100268'
}, Bean{name='bean_100269'
}, Bean{name='bean_100240'
}, Bean{n2019-01-14 23:51:00.162 10171-10171/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: deleted: [Bean{name='bean_0'
}, Bean{name='bean_2'
}, Bean{name='bean_4'
}, Bean{name='bean_6'
}, Bean{name='bean_8'
}, Bean{name='bean_10'
}, Bean{name='bean_12'
}, Bean{name='bean_14'
}, Bean{name='bean_16'
}, Bean{name='bean_18'
}, Bean{name='bean_20'
}, Bean{name='bean_22'
}, Bean{name='bean_24'
}, Bean{name='bean_26'
}, Bean{name='bean_28'
}, Bean{name='bean_30'
}, Bean{name='bean_32'
}, Bean{name='bean_34'
}, Bean{name='bean_36'
}, Bean{name='bean_38'
}, Bean{name='bean_40'
}, Bean{name='bean_42'
}, Bean{name='bean_44'
}, Bean{name='bean_46'
}, Bean{name='bean_48'
}, Bean{name='bean_50'
}, Bean{name='bean_52'
}, Bean{name='bean_54'
}, Bean{name='bean_56'
}, Bean{name='bean_58'
}, Bean{name='bean_60'
}, Bean{name='bean_62'
}, Bean{name='bean_64'
}, Bean{name='bean_66'
}, Bean{name='bean_68'
}, Bean{name='bean_70'
}, Bean{name='bean_72'
}, Bean{name='bean_74'
}, Bean{name='bean_76'
}, Bean{name='bean_78'
}, Bean{name='bean_80'
}, Bean{name='bean_82'
}, Bean{name='bean_84'
}, Bean{name='bean_86'
}, Bean{name='bean_88'
}, Bean{name='bean_90'
}, Bean{name='bean_92'
}, Bean{name='bean_94'
}, Bean{name='bean_96'
}, Bean{name='bean_98'
}, Bean{name='bean_100'
}, Bean{name='bean_102'
}, Bean{name='bean_104'
}, Bean{name='bean_106'
}, Bean{name='bean_108'
}, Bean{name='bean_110'
}, Bean{name='bean_112'
}, Bean{name='bean_114'
}, Bean{name='bean_116'
}, Bean{name='bean_118'
}, Bean{name='bean_120'
}, Bean{name='bean_122'
}, Bean{name='bean_124'
}, Bean{name='bean_126'
}, Bean{name='bean_128'
}, Bean{name='bean_130'
}, Bean{name='bean_132'
}, Bean{name='bean_134'
}, Bean{name='bean_136'
}, Bean{name='bean_138'
}, Bean{name='bean_140'
}, Bean{name='bean_142'
}, Bean{name='bean_144'
}, Bean{name='bean_146'
}, Bean{name='bean_148'
}, Bean{name='bean_150'
}, Bean{name='bean_152'
}, Bean{name='bean_154'
}, Bean{name='bean_156'
}, Bean{name='bean_158'
}, Bean{name='bean_160'
}, Bean{name='bean_162'
}, Bean{name='bean_164'
}, Bean{name='bean_166'
}, Bean{name='bean_168'
}, Bean{name='bean_170'
}, Bean{name='bean_172'
}, Bean{name='bean_174'
}, Bean{name='bean_176'
}, Bean{name='bean_178'
}, Bean{name='bean_180'
}, Bean{name='bean_182'
}, Bean{name='bean_184'
}, Bean{name='bean_186'
}, Bean{name='bean_188'
}, Bean{name='bean_190'
}, Bean{name='bean_192'
}, Bean{name='bean_194'
}, Bean{name='bean_196'
}, Bean{name='bean_198'
}, Bean{name='bean_200'
}, Bean{name='bean_202'
}, Bean{name='bean_204'
}, Bean{name='bean_206'
}, Bean{name='bean_208'
}, Bean{name='bean_210'
}, Bean{name='bean_212'
}, Bean{name='bean_214'
}, Bean{name='bean_216'
}, Bean{name='bean_218'
}, Bean{name='bean_220'
}, Bean{name='bean_222'
}, Bean{name='bean_224'
}, Bean{name='bean_226'
}, Bean{name='bean_228'
}, Bean{name='bean_230'
}, Bean{name='bean_232'
}, Bean{name='bean_234'
}, Bean{name='bean_236'
}, Bean{name='bean_238'
}, Bean{name='bean_240'
}, Bean{name='bean_242'
}, Bean{name='bean_244'
}, Bean{name='bean_246'
}, Bean{name='bean_248'
}, Bean{name='bean_250'
}, Bean{name='bean_252'
}, Bean{name='bean_254'
}, Bean{name='bean_256'
}, Bean{name='bean_258'
}, Bean{name='bean_260'
}, Bean{name='bean_262'
}, Bean{name='bean_264'
}, Bean{name='bean_266'
}, Bean{name='bean_268'
}, Bean{name='bean_270'
}, Bean{name='bean_272'
}, Bean{name='bean_274'
}, Bean{name='bean_276'
}, Bean{name='bean_278'
}, Bean{name='bean_280'
}, Bean{name='bean_282'
}, Bean{name='bean_284'
}, Bean{name='bean_286'
}, Bean{name='bean_288'
}, Bean{name='bean_290'
}, Bean{name='bean_292'
}, Bean{name='bean_294'
}, Bean{name='bean_296'
}, Bean{name='bean_298'
}, Bean{name='bean_300'
}, Bean{name='bean_302'
}, Bean{name='bean_304'
}, Bean{name='bean_306'
}, Bean{name='bean_308'
}, Bean{name='bean_310'
}, Bean{name='bean_312'
}, Bean{name='bean_314'
}, Bean{name='bean_316'
}, Bean{name='bean_318'
}, Bean{name='bean_320'
}, Bean{name='bean_322'
}, Bean{name='bean_324'
}, Bean{name='bean_326'
}, Bean{name='bean_328'
}, Bean{name='bean_330'
}, Bean{name='bean_332'
}, Bean{name='bean_334'
}, Bean{name='bean_336'
}, Bean{name='bean_338'
}, Bean{name='bean_340'
}, Bean{name='bean_342'
}, Bean{name='bean_344'
}, Bean{name='bean_346'
}, Bean{name='bean_348'
}, Bean{name='bean_350'
}, Bean{name='bean_352'
}, Bean{name='bean_352019-01-14 23:51:00.163 10171-10171/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil2: updated: [Bean{name='multiple_of_3_bean_1011'
}, Bean{name='multiple_of_3_bean_1008'
}, Bean{name='multiple_of_3_bean_1005'
}, Bean{name='multiple_of_3_bean_1002'
}, Bean{name='multiple_of_3_bean_1020'
}, Bean{name='multiple_of_3_bean_1017'
}, Bean{name='multiple_of_3_bean_1014'
}, Bean{name='multiple_of_3_bean_1032'
}, Bean{name='multiple_of_3_bean_1029'
}, Bean{name='multiple_of_3_bean_1026'
}, Bean{name='multiple_of_3_bean_1023'
}, Bean{name='multiple_of_3_bean_1044'
}, Bean{name='multiple_of_3_bean_1041'
}, Bean{name='multiple_of_3_bean_1038'
}, Bean{name='multiple_of_3_bean_1035'
}, Bean{name='multiple_of_3_bean_1053'
}, Bean{name='multiple_of_3_bean_1050'
}, Bean{name='multiple_of_3_bean_1047'
}, Bean{name='multiple_of_3_bean_1065'
}, Bean{name='multiple_of_3_bean_1062'
}, Bean{name='multiple_of_3_bean_1059'
}, Bean{name='multiple_of_3_bean_1056'
}, Bean{name='multiple_of_3_bean_1077'
}, Bean{name='multiple_of_3_bean_1074'
}, Bean{name='multiple_of_3_bean_1071'
}, Bean{name='multiple_of_3_bean_1068'
}, Bean{name='multiple_of_3_bean_1080'
}, Bean{name='multiple_of_3_bean_1086'
}, Bean{name='multiple_of_3_bean_1083'
}, Bean{name='multiple_of_3_bean_1098'
}, Bean{name='multiple_of_3_bean_1095'
}, Bean{name='multiple_of_3_bean_1092'
}, Bean{name='multiple_of_3_bean_1089'
}, Bean{name='multiple_of_3_bean_1110'
}, Bean{name='multiple_of_3_bean_1107'
}, Bean{name='multiple_of_3_bean_1104'
}, Bean{name='multiple_of_3_bean_1101'
}, Bean{name='multiple_of_3_bean_1116'
}, Bean{name='multiple_of_3_bean_1113'
}, Bean{name='multiple_of_3_bean_1119'
}, Bean{name='multiple_of_3_bean_1131'
}, Bean{name='multiple_of_3_bean_1128'
}, Bean{name='multiple_of_3_bean_1125'
}, Bean{name='multiple_of_3_bean_1122'
}, Bean{name='multiple_of_3_bean_1143'
}, Bean{name='multiple_of_3_bean_1140'
}, Bean{name='multiple_of_3_bean_1137'
}, Bean{name='multiple_of_3_bean_1134'
}, Bean{name='multiple_of_3_bean_1152'
}, Bean{name='multiple_of_3_bean_1149'
}, Bean{name='multiple_of_3_bean_1146'
}, Bean{name='multiple_of_3_bean_1164'
}, Bean{name='multiple_of_3_bean_1161'
}, Bean{name='multiple_of_3_bean_1158'
}, Bean{name='multiple_of_3_bean_1155'
}, Bean{name='multiple_of_3_bean_1176'
}, Bean{name='multiple_of_3_bean_1173'
}, Bean{name='multiple_of_3_bean_1170'
}, Bean{name='multiple_of_3_bean_1167'
}, Bean{name='multiple_of_3_bean_1185'
}, Bean{name='multiple_of_3_bean_1182'
}, Bean{name='multiple_of_3_bean_1179'
}, Bean{name='multiple_of_3_bean_1197'
}, Bean{name='multiple_of_3_bean_1194'
}, Bean{name='multiple_of_3_bean_1191'
}, Bean{name='multiple_of_3_bean_1188'
}, Bean{name='multiple_of_3_bean_1206'
}, Bean{name='multiple_of_3_bean_1203'
}, Bean{name='multiple_of_3_bean_1200'
}, Bean{name='multiple_of_3_bean_1209'
}, Bean{name='multiple_of_3_bean_1215'
}, Bean{name='multiple_of_3_bean_1212'
}, Bean{name='multiple_of_3_bean_1218'
}, Bean{name='multiple_of_3_bean_1230'
}, Bean{name='multiple_of_3_bean_1227'
}, Bean{name='multiple_of_3_bean_1224'
}, Bean{name='multiple_of_3_bean_1221'
}, Bean{name='multiple_of_3_bean_1242'
}, Bean{name='multiple_of_3_bean_1239'
}, Bean{name='multiple_of_3_bean_1236'
}, Bean{name='multiple_of_3_bean_1233'
}, Bean{name='multiple_of_3_bean_1251'
}, Bean{name='multiple_of_3_bean_1248'
}, Bean{name='multiple_of_3_bean_1245'
}, Bean{name='multiple_of_3_bean_1263'
}, Bean{name='multiple_of_3_bean_1260'
}, Bean{name='multiple_of_3_bean_1257'
}, Bean{name='multiple_of_3_bean_1254'
}, Bean{name='multiple_of_3_bean_1275'
}, Bean{name='multiple_of_3_bean_1272'
}, Bean{name='multiple_of_3_bean_1269'
}, Bean{name='multiple_of_3_bean_1266'
}, Bean{name='multiple_of_3_bean_1284'
}, Bean{name='multiple_of_3_bean_1281'
}, Bean{name='multiple_of_3_bean_1278'
}, Bean{name='multiple_of_3_bean_1296'
}, Bean{name='multiple_of_3_bean_1293'
}, Bean{name='multiple_of_3_bean_1290'
}, Bean{name='multiple_of_3_bean_1287'
}, Bean{name='multiple_of_3_bean_1299'
}, Bean{name='multiple_of_3_bean_1305'
}, Bean{name='multiple_of_3_bean_1302'
}, Bean{name='multiple_of_3_bean_1308'
}, Bean{name='multiple_of_3_bean_1314'
}, Bean{name='multiple_of_3_bean_1311'
}, Bean{name='multiple_of_3_bean_1317'
}, Bean{n複製程式碼
顯然,在資料量比較大時,還是 HashMap 的效能好!
結語
還好,筆者在專案中雖然沒有使用 Map,但是使用的 ArrayList,LinkedList 只是想想而已。