class ListUtils {

    public static <Item> SparseIntArray getReorderings(List<? extends Item> oldList, List<? extends Item> newList){
        List<Pair<Integer, Integer>> moveList = calculateMoves(oldList, newList);
        List<Integer> netMoveScores = calculateNetMoveScores(moveList);
        SparseIntArray reorderings = new SparseIntArray();
        while(extractReordering(moveList, netMoveScores, reorderings));
        return reorderings;
    }

}