DiffUtil是support-v7:24.2.0中新增的工具類,它用來比較兩個數據,尋找兩者之間的最小變化量,再將算好的結果return。因此凡是數據集的比較都能做,DiffUtil提供了callback讓user進行其他操作,本篇著重在RecyclerView的更新。
採用Myers的差異算法(git diff)。空間複雜度為O(n),時間複雜度為O(N + D ^2)。 主要是計算兩個數據集添加和刪除的最小差異數,也就是用最簡單的方式將一個數據集轉換為另一個。 DiffUtil預設支援數據的移動偵測,所以需要對結果進行二次運算,較為耗費效能,時間複雜度提高到O(N ^ 2),N是add和remove的操作總數;但如果數據集已根據條件排序,或是數據集中的數據不存在移位情境,可以關掉第二次計算來提高效能。
它最大的用處就是在RecyclerView刷新時,不再無腦notifyDataSetChanged(),原本的notifyDataSetChanged()有兩個缺點: