Java必须掌握的泛型【】(含面试大厂题含源码)

以下是一个可能的Java泛型面试题,适用于大型科技公司面试:

题目:编写一个Java程序,实现一个泛型方法,该方法接受一个任意类型的数组和一个比较器,然后根据比较器对数组进行排序。

java 复制代码
public class GenericSort {
    public static <T> void sort(T[] array, Comparator<? super T> comparator) {
        // TODO: 实现排序逻辑
    }
    public static void main(String[] args) {
        // 测试整数数组
        Integer[] intArray = {3, 1, 4, 1, 5, 9, 2, 6, 5};
        sort(intArray, Integer::compareTo);
        System.out.println(Arrays.toString(intArray));
        // 测试字符串数组
        String[] stringArray = {"Banana", "Apple", "Orange", "Kiwi"};
        sort(stringArray, String.CASE_INSENSITIVE_ORDER);
        System.out.println(Arrays.toString(stringArray));
    }
}

要求:

  1. 使用Java泛型。
  2. 使用Java内置的Comparator接口。
  3. 不要使用Java内置的排序方法(如Arrays.sort())。
    这个题目考查了候选人对于Java泛型、比较器接口以及排序算法的理解。正确答案应该包括一个稳定的排序算法,如冒泡排序、插入排序或归并排序。
    要对数组进行逆序排序,你可以使用Java内置的Collections.reverseOrder()方法,它会返回一个比较器,该比较器会对实现Comparable接口的对象进行逆序排序。如果你想要对自定义对象进行逆序排序,你可以创建一个比较器,并在其中反转比较逻辑。
    以下是一个示例,展示了如何使用Collections.reverseOrder()对整数数组进行逆序排序:
java 复制代码
import java.util.Arrays;
import java.util.Comparator;
public class GenericSort {
    public static <T> void sort(T[] array, Comparator<? super T> comparator) {
        // 冒泡排序示例
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = 0; j < array.length - 1 - i; j++) {
                if (comparator.compare(array[j], array[j + 1]) > 0) {
                    T temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
    }
    public static void main(String[] args) {
        // 测试整数数组
        Integer[] intArray = {3, 1, 4, 1, 5, 9, 2, 6, 5};
        sort(intArray, Collections.reverseOrder());
        System.out.println(Arrays.toString(intArray));
    }
}

如果你想要对自定义对象进行逆序排序,你可以创建一个比较器类,如下所示:

java 复制代码
import java.util.Comparator;
public class CustomObjectComparator implements Comparator<CustomObject> {
    @Override
    public int compare(CustomObject o1, CustomObject o2) {
        // 假设CustomObject有一个Comparable类型的属性叫做"value"
        return o2.getValue().compareTo(o1.getValue()); // 逆序比较
    }
}

然后在排序方法中使用这个比较器:

java 复制代码
CustomObject[] customArray = {/* 初始化数组 */};
sort(customArray, new CustomObjectComparator());

这样,数组就会根据你自定义的比较器进行逆序排序。

当然,如果你想要对数组进行逆序排序,而不使用Java内置的Collections.reverseOrder()方法,你可以创建一个自定义的比较器,直接在比较器中实现逆序的逻辑。以下是一个简单的示例,展示了如何创建一个自定义的比较器来对整数数组进行逆序排序:

java 复制代码
import java.util.Arrays;
import java.util.Comparator;
public class ReverseOrderComparator implements Comparator<Integer> {
    @Override
    public int compare(Integer o1, Integer o2) {
        // 实现逆序比较逻辑
        return o2 - o1; // 如果o2大于o1,返回正数,保持不变;如果o2小于o1,返回负数,交换位置
    }
}
public class GenericSort {
    public static <T> void sort(T[] array, Comparator<? super T> comparator) {
        // 冒泡排序示例
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = 0; j < array.length - 1 - i; j++) {
                if (comparator.compare(array[j], array[j + 1]) > 0) {
                    T temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
    }
    public static void main(String[] args) {
        // 测试整数数组
        Integer[] intArray = {3, 1, 4, 1, 5, 9, 2, 6, 5};
        sort(intArray, new ReverseOrderComparator());
        System.out.println(Arrays.toString(intArray));
    }
}

在这个例子中,ReverseOrderComparator实现了Comparator接口,并在compare方法中提供了逆序比较的逻辑。然后,在main方法中,我们创建了一个ReverseOrderComparator的实例,并将其传递给sort方法,以便对整数数组进行逆序排序。

这种方法的好处是它不仅适用于整数,还适用于任何可以进行比较的类型,只要它们可以被传递给比较器。如果你想要对其他类型进行逆序排序,你只需要创建一个新的比较器类,并在其中实现逆序比较的逻辑即可。

相关推荐
我命由我123456 小时前
Android Studio - Android Studio 自定义预览尺寸
android·java·ide·java-ee·android studio·android-studio·android runtime
充钱大佬7 小时前
Python测试基础教程
python·log4j·apache
怕浪猫7 小时前
现在的"AI 原生应用"热潮,恰恰证明了大多数产品需求本身就是个草台班子
面试
咖啡八杯7 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
AIGS0017 小时前
企业AI落地的关键认知:向量空间JBoltAI的本体语义平台
java·人工智能·人工智能ai大模型应用
KaMeidebaby8 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
初心丨哈士奇9 小时前
Python 四大基础容器|列表篇
python
醉城夜风~10 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
明理的信封10 小时前
AI 基础设施的“去 Python 化“:Rust 与 C# 的两条替代路径
人工智能·python·rust
TPBoreas10 小时前
MySQL性能优化面试全攻略
mysql·面试·性能优化