集合差別比較算法及性能測試

項目經驗,如需轉載,請註明做者:Yuloran (t.cn/EGU6c76)html

前言

筆者以前作項目的時候,寫過一個小算法,用來實現兩張表的數據同步。由於移動端的數據量通常也就幾千條,因此便沒有關注性能問題。最近開始面試,因爲沒作過性能測試,只能根據經驗判斷,想了想仍是靠數聽說話比較好。java

算法

集合 A 是新集合,集合 B 是老集合,現須要篩選出集合 A 中的新增元素、已更新元素以及集合 B 中的已刪除元素。算法如上圖所示:node

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

}
複製代碼

以上代碼片斷只是示例,項目中須要使用請自行優化代碼結構。android

性能測試

顯然,上述所示算法的漸進時間複雜度爲 O(n),其中最大的問題就是 ArrayList 的 remove 操做,這會致使後續元素須要挨個向前拷貝一次。使用 LinkedList 能夠避免元素的拷貝,可是是否能夠下降算法執行時間呢?筆者作了個測試:git

  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²),因此耗時大大增長:github

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。sql

數據量爲 10 萬時(ArrayMap):express

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 只是想一想而已。

相關文章
相關標籤/搜索