集合差异比较算法及性能测试

632 阅读1小时+

项目经验,如需转载,请注明作者: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;
        }

        @Override
        public boolean equals(Object o)
        {
            if (this == o)
            {
                return true;
            }
            if (o == null || getClass() != o.getClass())
            {
                return false;
            }

            Bean bean = (Bean) o;

            if (id != bean.id)
            {
                return false;
            }
            return name.equals(bean.name);
        }

        @Override
        public int hashCode()
        {
            int result = id;
            result = 31 * result + name.hashCode();
            return result;
        }

        @Override
        public String toString()
        {
            return "Bean{" + "name='" + name + '\'' + '}';
        }
    }

    public static void calculateDiff()
    {
        List<Bean> originalList = generateOriginalList();
        List<Bean> latestList = generateLatestList();

        List<Bean> added = new ArrayList<>();
        List<Bean> deleted = new ArrayList<>();
        List<Bean> updated = new ArrayList<>();

        long timestamp = System.currentTimeMillis();
        for (int i = 0; i < Math.max(originalList.size(), latestList.size()); i++)
        {
            Bean original = getSafely(i, originalList);
            Bean latest = getSafely(i, latestList);

            if (original == null)
            {
                added.add(latest);
                continue;
            }

            if (latest == null)
            {
                deleted.add(original);
                continue;
            }

            if (latest.id > original.id)
            {
                deleted.add(original);
                originalList.remove(i);
                i--;
            } else if (latest.id < original.id)
            {
                added.add(latest);
                latestList.remove(i);
                i--;
            } else
            {
                if (!latest.equals(original))
                {
                    updated.add(latest);
                }
            }
        }
        Logger.debug(TAG, "calculateDiff cost %dms.", (System.currentTimeMillis() - timestamp));
        Logger.debug(TAG, "added: %s", added);
        Logger.debug(TAG, "deleted: %s", deleted);
        Logger.debug(TAG, "updated: %s", updated);
    }

    private static List<Bean> generateOriginalList()
    {
        List<Bean> originalList = new ArrayList<>();
        for (int i = 0; i < 10000; i++)
        {
            originalList.add(new Bean(i, "bean_" + String.valueOf(i)));
        }
        return originalList;
    }

    private static List<Bean> generateLatestList()
    {
        List<Bean> latestList = new ArrayList<>();
        for (int i = 0; i < 10500; i++)
        {
            if (i < 1000)
            {
                if (i % 2 == 0)
                {
                    continue;
                }
            }

            if (i > 1000 && i < 2000)
            {
                if (i % 3 == 0)
                {
                    latestList.add(new Bean(i, "multiple_of_3_bean_" + String.valueOf(i)));
                    continue;
                }
            }

            latestList.add(new Bean(i, "bean_" + String.valueOf(i)));
        }
        return latestList;
    }

    private static Bean getSafely(int i, List<Bean> list)
    {
        if (i >= 0 && i < list.size())
        {
            return list.get(i);
        }
        return null;
    }

}

以上代码片段只是示例,项目中需要使用请自行优化代码结构。

性能测试

显然,上述所示算法的渐进时间复杂度为 O(n),其中最大的问题就是 ArrayList 的 remove 操作,这会导致后续元素需要挨个向前拷贝一次。使用 LinkedList 可以避免元素的拷贝,但是是否可以降低算法执行时间呢?笔者做了个测试:

  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
    {
        @NonNull
        String id;
        @NonNull
        String name;

        private Bean(@NonNull String id, @NonNull String name)
        {
            this.id = id;
            this.name = name;
        }

        @Override
        public boolean equals(Object o)
        {
            if (this == o)
            {
                return true;
            }
            if (o == null || getClass() != o.getClass())
            {
                return false;
            }

            Bean bean = (Bean) o;

            if (!id.equals(bean.id))
            {
                return false;
            }
            return name.equals(bean.name);
        }

        @Override
        public int hashCode()
        {
            int result = id.hashCode();
            result = 31 * result + name.hashCode();
            return result;
        }

        @Override
        public String toString()
        {
            return "Bean{" + "name='" + name + '\'' + '}';
        }
    }

    private static class Model<T>
    {
        private T value;

        /**
         * 1相同  2更新  3新增  4删除
         */
        private int type;

        private Model(T value, int type)
        {
            this.value = value;
            this.type = type;
        }
    }

    public static void calculateDiff()
    {
        List<Bean> originalList = generateOriginalList();
        List<Bean> latestList = generateLatestList();

        List<Bean> added = new ArrayList<>();
        List<Bean> deleted = new ArrayList<>();
        List<Bean> updated = new ArrayList<>();

        long timestamp = System.currentTimeMillis();
        Map<String, Model<Bean>> map = new ArrayMap<>(latestList.size());
        for (Bean bean : originalList)
        {
            map.put(bean.id, new Model<>(bean, 4));
        }

        for (Bean bean : latestList)
        {
            Model<Bean> model = map.get(bean.id);

            if (model == null)
            {
                // 新增元素
                map.put(bean.id, new Model<>(bean, 3));
                continue;
            }

            if (bean.equals(model.value))
            {
                // 保持不变的元素
                map.put(bean.id, new Model<>(bean, 1));
            } else
            {
                // 已更新元素
                map.put(bean.id, new Model<>(bean, 2));
            }
        }

        for (Map.Entry<String, Model<Bean>> entry : map.entrySet())
        {
            switch (entry.getValue().type)
            {
                case 1://相同
                    break;
                case 2://更新
                    updated.add(entry.getValue().value);
                    break;
                case 3://新增
                    added.add(entry.getValue().value);
                    break;
                case 4://删除
                    deleted.add(entry.getValue().value);
                    break;
                default:
            }
        }
        Logger.debug(TAG, "calculateDiff cost %dms.", (System.currentTimeMillis() - timestamp));
        Logger.debug(TAG, "added: %s", added);
        Logger.debug(TAG, "deleted: %s", deleted);
        Logger.debug(TAG, "updated: %s", updated);
    }

    private static List<Bean> generateOriginalList()
    {
        List<Bean> originalList = new ArrayList<>();
        for (int i = 0; i < 10000; i++)
        {
            originalList.add(new Bean(String.valueOf(i), "bean_" + String.valueOf(i)));
        }
        return originalList;
    }

    private static List<Bean> generateLatestList()
    {
        List<Bean> latestList = new ArrayList<>();
        for (int i = 0; i < 10500; i++)
        {
            if (i < 1000)
            {
                if (i % 2 == 0)
                {
                    continue;
                }
            }

            if (i > 1000 && i < 2000)
            {
                if (i % 3 == 0)
                {
                    latestList.add(new Bean(String.valueOf(i), "multiple_of_3_bean_" + String.valueOf(i)));
                    continue;
                }
            }

            latestList.add(new Bean(String.valueOf(i), "bean_" + String.valueOf(i)));
        }
        return latestList;
    }

}

性能对比

数据量为 1 万时(ArrayMap):

2019-01-14 23:26:43.807 7980-7980/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: calculateDiff cost 12ms.
2019-01-14 23:26:43.807 7980-7980/com.yuloran.wanandroid_java D/WanAndroid: DiffUtil: added: [Bean{name='bean_10000'}, Bean{name='bean_10001'}, Bean{name='bean_10002'}, Bean{name='bean_10003'}, Bean{name='bean_10004'}, Bean{name='bean_10005'}, Bean{name='bean_10006'}, Bean{name='bean_10007'}, Bean{name='bean_10008'}, Bean{name='bean_10009'}, Bean{name='bean_10010'}, Bean{name='bean_10011'}, Bean{name='bean_10012'}, Bean{name='bean_10013'}, Bean{name='bean_10014'}, Bean{name='bean_10015'}, Bean{name='bean_10016'}, Bean{name='bean_10017'}, Bean{name='bean_10018'}, Bean{name='bean_10019'}, Bean{name='bean_10020'}, Bean{name='bean_10021'}, Bean{name='bean_10022'}, Bean{name='bean_10023'}, Bean{name='bean_10024'}, Bean{name='bean_10025'}, Bean{name='bean_10026'}, Bean{name='bean_10027'}, Bean{name='bean_10028'}, Bean{name='bean_10029'}, Bean{name='bean_10030'}, Bean{name='bean_10031'}, Bean{name='bean_10032'}, Bean{name='bean_10033'}, Bean{name='bean_10034'}, Bean{name='bean_10035'}, Bean{name='bean_10036'}, Bean{name='bean_10037'}, Bean{name='bean_10038'}, Bean{name='bean_10039'}, Bean{name='bean_10040'}, Bean{name='bean_10041'}, Bean{name='bean_10042'}, Bean{name='bean_10043'}, Bean{name='bean_10044'}, Bean{name='bean_10045'}, Bean{name='bean_10046'}, Bean{name='bean_10047'}, Bean{name='bean_10048'}, Bean{name='bean_10049'}, Bean{name='bean_10050'}, Bean{name='bean_10051'}, Bean{name='bean_10052'}, Bean{name='bean_10053'}, Bean{name='bean_10054'}, Bean{name='bean_10055'}, Bean{name='bean_10056'}, Bean{name='bean_10057'}, Bean{name='bean_10058'}, Bean{name='bean_10059'}, Bean{name='bean_10060'}, Bean{name='bean_10061'}, Bean{name='bean_10062'}, Bean{name='bean_10063'}, Bean{name='bean_10064'}, Bean{name='bean_10065'}, Bean{name='bean_10066'}, Bean{name='bean_10067'}, Bean{name='bean_10068'}, Bean{name='bean_10069'}, Bean{name='bean_10070'}, Bean{name='bean_10071'}, Bean{name='bean_10072'}, Bean{name='bean_10073'}, Bean{name='bean_10074'}, Bean{name='bean_10075'}, Bean{name='bean_10076'}, Bean{name='bean_10077'}, Bean{name='bean_10078'}, Bean{name='bean_10079'}, Bean{name='bean_10080'}, Bean{name='bean_10081'}, Bean{name='bean_10082'}, Bean{name='bean_10083'}, Bean{name='bean_10084'}, Bean{name='bean_10085'}, Bean{name='bean_10086'}, Bean{name='bean_10087'}, Bean{name='bean_10088'}, Bean{name='bean_10089'}, Bean{name='bean_10090'}, Bean{name='bean_10091'}, Bean{name='bean_10092'}, Bean{name='bean_10093'}, Bean{name='bean_10094'}, Bean{name='bean_10095'}, Bean{name='bean_10096'}, Bean{name='bean_10097'}, Bean{name='bean_10098'}, Bean{name='bean_10099'}, Bean{name='bean_10100'}, Bean{name='bean_10101'}, Bean{name='bean_10102'}, Bean{name='bean_10103'}, Bean{name='bean_10104'}, Bean{name='bean_10105'}, Bean{name='bean_10106'}, Bean{name='bean_10107'}, Bean{name='bean_10108'}, Bean{name='bean_10109'}, Bean{name='bean_10110'}, Bean{name='bean_10111'}, Bean{name='bean_10112'}, Bean{name='bean_10113'}, Bean{name='bean_10114'}, Bean{name='bean_10115'}, Bean{name='bean_10116'}, Bean{name='bean_10117'}, Bean{name='bean_10118'}, Bean{name='bean_10119'}, Bean{name='bean_10120'}, Bean{name='bean_10121'}, Bean{name='bean_10122'}, Bean{name='bean_10123'}, Bean{name='bean_10124'}, Bean{name='bean_10125'}, Bean{name='bean_10126'}, Bean{name='bean_10127'}, Bean{name='bean_10128'}, Bean{name='bean_10129'}, Bean{name='bean_10130'}, Bean{name='bean_10131'}, Bean{name='bean_10132'}, Bean{name='bean_10133'}, Bean{name='bean_10134'}, Bean{name='bean_10135'}, Bean{name='bean_10136'}, Bean{name='bean_10137'}, Bean{name='bean_10138'}, Bean{name='bean_10139'}, Bean{name='bean_10140'}, Bean{name='bean_10141'}, Bean{name='bean_10142'}, Bean{name='bean_10143'}, Bean{name='bean_10144'}, Bean{name='bean_10145'}, Bean{name='bean_10146'}, Bean{name='bean_10147'}, Bean{name='bean_10148'}, Bean{name='bean_10149'}, Bean{name='bean_10150'}, Bean{name='bean_10151'}, Bean{name='bean_10152'}, Bean{name='bean_10153'}, Bean{name='bean_10154'}, Bean{name='bean_10155'}, Bean{name='bean_10156'}, Bean{name='bean_10157'}, Bean{name='bean_10158'}, Bean{name='bean_10159'}, Bean{name='bean_10160'}, Bean{name='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 只是想想而已。