泛型和传递数组作为参数的麻烦

时间:2018-09-11 03:17:10

标签: java generics

所以我在从事的项目遇到麻烦。该项目听起来很简单,我能够完成其中的2/3。我必须在类MyGenerics中添加3个泛型方法。方法是:

a。 mymin,其中将数组(不确定类型)作为参数传入,并返回最小元素。

b。接受一个数组(不确定类型)的max2作为参数传入,并返回最大的两个元素。

c。接受一个数组(不确定类型)的中位数作为参数传入,并返回中位数。

我很容易完成a和c。我的问题是与b。我不知道如何返回最大值以及第二个最大值。我最初的想法是获取数组中的初始最大值,然后将其删除并再次获得最大值,这样“新”最大值将成为第二高的值。这是我的代码:

O(n)

希望这尽可能地合理。再次,我现在该怎么做才能只获得要打印的最大值,但要获得第二个最大值。谢谢。

1 个答案:

答案 0 :(得分:0)

数组是底层构造;通常,请改用集合API。

我不确定您的困惑是要创建2个长度的数组,还是要找到前2个元素。

如果是前者:

通常不可能创建新的泛型类型的数组(因为要擦除),但是在这种情况下,您可以从现有数组中退出:

E[] out = (E[]) java.lang.reflect.Array.newInstance(elements.getClass().getComponentType(), 2);

是的,丑陋的,怪异的,令人费解的,并且会生成一些泛型警告,您必须忽略它们。

关于跟踪最大的2个部分,您可以使用到目前为止所使用的相同技巧,只是进行更多比较(将任何数字与最大值和第二至最大值进行比较)

另一个选择是对数组进行排序,只返回最后2个元素。 Arrays.sort可能会有所帮助。