gpt4 book ai didi

java - 如何在 java 中使用泛型方法对每个类型数组进行排序?

转载 作者:行者123 更新时间:2023-11-29 08:23:48 24 4
gpt4 key购买 nike

当我编译我的代码时,它显示 E 无法转换为 int。

public static <E> void sort(E[] ar){
int swap;

for (int i = 0; i < ar.length; i++) {
for (int j = i; j < ar.length - 1; j++) {
if (ar[j].compareTo(ar[j + 1])) {
swap = ar[j];
ar[j] = ar[j + 1];
ar[j + 1] = swap;
}
}
}
}

最佳答案

首先,您的编译错误来自swap 变量的类型。在 swap = ar[j]; 行中,您试图将 E 类型的值放入 int 类型的变量中。那是类型错误。要解决此问题,您需要通过执行以下操作来更改 swap 变量的类型:

E swap;

现在,如果您想对通用类型的对象进行排序,您需要知道如何比较它们。在 Java 中,有两种方法可以做到这一点。要么该类型必须实现 Comparable 接口(interface),要么您需要将类型为 Comparator 的对象作为参数。使用 Comparator 更加灵活,因为它使调用者能够轻松地以多种方式对同一类型进行排序(例如按时间顺序和倒序)。

要让您的代码使用Comparable,您需要在类型参数上放置类型约束。像这样:

public static <E extends Comparable<E>> void sort(E[] ar){
E swap;

for (int i = 0; i < ar.length; i++) {
for (int j = i; j < ar.length - 1; j++) {
// Now you can use compareTo because E is a Comparable.
// Also note the "< 0" because compareTo returns an int.
if (ar[j].compareTo(ar[j + 1]) < 0) {
swap = ar[j];
ar[j] = ar[j + 1];
ar[j + 1] = swap;
}
}
}
}

下面是使用 Comparator 的方法:

public static <E> void sort(E[] ar, Comparator<E> comparator){
E swap;

for (int i = 0; i < ar.length; i++) {
for (int j = i; j < ar.length - 1; j++) {
if (comparator.compare(ar[j], ar[j + 1]) < 0) {
swap = ar[j];
ar[j] = ar[j + 1];
ar[j + 1] = swap;
}
}
}
}

您可以像这样创建比较器来调用该函数:

// Sorting integers in ascending order.
sort(intArr, Comparator.naturalOrder());

// Sorting persons in descending order by age.
sort(personArr, Comparator.comparing(Person::getAge).reversed());

注意:您的代码实际上还没有对任何内容进行排序,因为您的算法是错误的。那留给你解决:)

关于java - 如何在 java 中使用泛型方法对每个类型数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55196198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com