项目经验,如需转载,请注明作者:Yuloran (t.cn/EGU6c76)

前言

笔者之前做项目的时候,写过一个小算法,用来实现两张表的数据同步。因为移动端的数据量一般也就几千条,所以便没有关注性能问题。最近开始面试,由于没做过性能测试,只能根据经验判断,想了想还是靠数据说话比较好。

算法

集合 A 是新集合,集合 B 是老集合,现需要筛选出集合 A 中的新增元素、已更新元素以及集合 B 中的已删除元素。算法如上图所示:

  1. 使用 sql 语句按 id 升序分别读取两张表的记录并保存至集合 A 和集合 B 中(id 为自增长的 int 类型)
  2. 分别从集合 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 添加到已更新元素集合,然后继续下一次循环
  3. 因为循环比较的次数为 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;}@Overridepublic 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);}@Overridepublic int hashCode(){int result = id;result = 31 * result + name.hashCode();return result;}@Overridepublic 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 可以避免元素的拷贝,但是是否可以降低算法执行时间呢?笔者做了个测试:

  1. 使用 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='b
2019-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_354
2019-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
复制代码
  1. 使用 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='b
2019-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_354
2019-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{@NonNullString id;@NonNullString name;private Bean(@NonNull String id, @NonNull String name){this.id = id;this.name = name;}@Overridepublic 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);}@Overridepublic int hashCode(){int result = id.hashCode();result = 31 * result + name.hashCode();return result;}@Overridepublic 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='b
2019-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_354
2019-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{na
2019-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_35
2019-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{na
2019-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_354
2019-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{na
2019-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{n
2019-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_35
2019-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='b
2019-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_354
2019-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{na
2019-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_45
2019-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{na
2019-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_354
2019-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{na
2019-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{n
2019-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_35
2019-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 只是想想而已。

  • 算法渐进复杂度的由来及术语解释
  • 算法渐进复杂度计算的几个经典示例

集合差异比较算法及性能测试相关推荐

  1. java 性能 排序_Java常用排序算法及性能测试集合

    package algorithm.sort; import java.lang.reflect.Method; import java.util.Arrays; import java.util.D ...

  2. JavaScript实现使用 BACKTRACKING 方法查找集合的幂集算法

    JavaScript实现使用 BACKTRACKING 方法查找集合的幂集算法(附完整源码) btPowerSet.js完整源代码 btPowerSet.test.js完整源代码 btPowerSet ...

  3. JavaScript实现使用 BITWISE 方法查找集合的幂集算法(附完整源码)

    JavaScript实现使用 BITWISE 方法查找集合的幂集算法(附完整源码) bwPowerSet.js完整源代码 bwPowerSet.test.js完整源代码 bwPowerSet.js完整 ...

  4. 双链集合添加删除算法

    2019独角兽企业重金招聘Python工程师标准>>> 双链集合添加删除算法: package com.linkes;public class MyLinkeList { /*** ...

  5. 计算机应用与软件状态变化,一种两状态动态优化的自学习差异进化算法-计算机应用与软件.pdf...

    一种两状态动态优化的自学习差异进化算法-计算机应用与软件 第33卷第4期 计算机应用与软件 Vol33No.4 2016年4月 ComputerApplicationsandSoftware Apr ...

  6. 无向图:查找最小环集合(最短路径回溯算法)

    在无向图中查找最小环,就像需要查找一个蜂窝中所有孔洞,如果只查找数目,可以利用欧拉公式,若查找到所有环,需要更进一步的搜索. 方法:寻找到所有顶点的最短路径,对每一个顶点,取出环,循环删除顶点,输出所 ...

  7. 如何将一个向量投影到一个平面上_到标准单纯型集合的投影算法

    本文介绍到标准单纯型集(The Standard Simplex Set)的投影算法. 1. 简介 在优化算法当中,我们的目标问题常常带有各种各样的限制条件.例如在某项投资活动中,我们想计算投入为多少 ...

  8. leetcode1296. 划分数组为连续数字的集合(贪心算法)

    给你一个整数数组 nums 和一个正整数 k,请你判断是否可以把这个数组划分成一些由 k 个连续数字组成的集合. 如果可以,请返回 True:否则,返回 False. 示例 1: 输入:nums = ...

  9. 蛋白质集合c语言算法,利用蛋白质序列的预测方法

    分析新发现的蛋白质或未知功能的基因产物的第一步是用BLAST或其它工具在公共数据库中进行相似性搜索.然而,这种搜索可能无法找到一个已知相符蛋白质:即使能得到一个统计显著的相符蛋白质,也很可能在序列记录 ...

最新文章

  1. 样条表示---OpenGL的逼近样条函数
  2. gerrit的Change-Id机制和hook机制
  3. my rank in math in the domain of pure mathematics
  4. MultiSlider组件
  5. GO模仿python –m SimpleHTTPServer 8080
  6. Spring Data JPA使用
  7. 易语言lol自动接受源码分享以及lolApi相关使用教程
  8. 前后端ajax分离如何做seo,前后端分离 seo
  9. cpu天梯图2022 cpu性能排行榜2022最新版
  10. 在c语言程序中添加背景音乐,怎么给你的C语言程序添加BGM背景音乐?
  11. 算法竞赛进阶指南 激光炸弹
  12. 轻松玩转微信公众号排版
  13. 少年歌行、少年白马、暗河传综合实力排行
  14. frp内网穿透入门级木马上线实践
  15. 雨课堂刷视频Python脚本
  16. C语言学习笔记—链表(四)链表的删除
  17. python之pyttsx3实现文字转语音播报
  18. jQuery 08-13
  19. Windows10更新导致共享打印机无法连接
  20. 计算机网络里面ap是什么,无线AP是什么

热门文章

  1. 如何判断字符串已经被url编码_如何判断回文数?不要再将整数转为字符串来解决这个问题了...
  2. 淡黄色电子书阅读器网站模板
  3. 【CRMEB知识付费系统v1.4.4】
  4. PHP精美列表商城发卡网站源码响应式
  5. [手把手教]discuzX2插件制作教程__最菜鸟级别的入门坎 【二】
  6. Keep-Alive功能使客户端到服务器端的连接持续有效
  7. 虚拟机体验苹果系统.Mac OS X On VMware.[Intel/AMD]版本
  8. TabControl与UserControl合伙吃内存
  9. Google AdSense中文官方博客今天公布了AdSense内容广告与AdSense搜索广告的收入分成比例...
  10. 使用 node.js 进行服务器端 JavaScript 编程