奇怪是因为搜索引擎基本搜不到,适合面试刁难人

Q

    /**
     * 求 listA -> listB 的差集
     * 要求不使用removeAll 、contains 、indexOf
     *
     * @param listA 集合a
     * @param listB 集合b
     * @return result
     */
    public static List<Integer> difference(List<Integer> listA, List<Integer> listB) {
        List<Integer> result = new ArrayList<>();
	// ...
 	return result;
}

A

目前已知最快解法

    public static List<Integer> difference(List<Integer> listA, List<Integer> listB) {
        List<Integer> result = new ArrayList<>(listA);
        listA.forEach(a -> {
            listB.forEach(b -> {
                if (a.equals(b)) {
                    result.remove(a);
                }
            });
        });
        return result;

    }

    public static void main(String[] args) {
        List<Integer> listA = List.of(1, 3, 5, 7, 9);
        List<Integer> listB = List.of(2, 4, 6, 8, 10);
        List<Integer> differences = difference(listA, listB);
        differences.forEach(System.out::println);
    }

Q.E.D.


自能成羽翼,何必仰云梯。