例えば, RecyclerView で一覧を作成して表示しているとして
1. 田中一郎
2. 佐藤二郎
3. 鈴木三郎
....
サーバなどに問い合わせて取得された以下データ
1. 田中一郎
2. ジローラモ
3. 鈴木三郎
...
を一覧画面に反映させたい場合.
RecyclerView.Adapter に更新を通知する場合,
RecyclerView.Adapter | Android Developers 
notify*() のうちアイテムの更新に関するものは
notifyDataSetChanged()
notifyItemChanged(int position, Object payload)
notifyItemChanged(int position)
notifyItemRangeChanged(int positionStart, int itemCount, Object payload)
notifyItemRangeChanged(int positionStart, int itemCount)
ですが, それぞれ以下の面倒な部分がありました.
notifyDataSetChanged()
→ 変更部分のみに関してのアニメーションが表示されない.
notifyItemChanged(int position, Object payload)
notifyItemChanged(int position)
notifyItemRangeChanged(int positionStart, int itemCount, Object payload)
notifyItemRangeChanged(int positionStart, int itemCount)
→ アニメーションは表示されるが, 変更部分の position を計算して渡す必要がある.
その他 hasStableIds() と Loader  を使ったりなど面倒でしたよね.
DiffUtil を使う 
support-library-v7 24.2.0 で登場の DiffUtil を使いましょう.
DiffUtil | Android Developers  
コールバッククラス作成後, それを使った更新メソッドを Adapter 内に記述します.
MyDiffUtilCallback.java
public class MyDiffUtilCallback extends DiffUtil.Callback{
    List<Person> oldPersons;
    List<Person> newPersons;
    public MyDiffUtilCallback(List<Person> oldPersons, List<Person> newPersons) {
        this.oldPersons = oldPersons;
        this.newPersons = newPersons;
    }
    @Override
    public int getOldListSize() {
        return oldPersons.size();
    }
    @Override
    public int getNewListSize() {
        return newPersons.size();
    }
    @Override
    public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
        return oldPersons.get(oldItemPosition).id == newPersons.get(newItemPosition).id;
    }
    @Override
    public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
        return oldPersons.get(oldItemPosition).equals(newPersons.get(newItemPosition));
    }
    @Nullable
    @Override
    public Object getChangePayload(int oldItemPosition, int newItemPosition) {
	// some additional information
        return super.getChangePayload(oldItemPosition, newItemPosition);
    }
}
MyRecyclerViewAdapter.java
public void updateList(ArrayList<Person> newList) {
        DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new MyDiffUtilCallback(this.persons, newList));
        diffResult.dispatchUpdatesTo(this);
}
これで, アイテムのポジションの計算はおまかせにして, 同時に綺麗なアニメーションが変更部分に適用されます.
実際, データ量が多い場合は厳しいようなので, RxJava なら メインスレッドにて以下.
@Override
public void onNext(DiffUtil.DiffResult result) {
    result.dispatchUpdatesTo(mProductAdapter);
}
kotlinなら同様に以下。
VIDEO 
internal class DiffUtilCallback(
    private val oldItems: List<Item>,
    private val newItems: List<Item>
) : DiffUtil.Callback() {
  override fun getOldListSize() = oldItems.size
  override fun getNewListSize() = newItems.size
  override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int)
      = oldItems[oldItemPosition].id == newItems[newItemPosition].id
  override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int)
      = oldItems[oldItemPosition] == newItems[newItemPosition]
}
以下のように使うと便利かもしれません.
リアクティブにデータ更新検知して自動画面更新させる