gpt4 book ai didi

java - 如何使用泛型方法在数组中查找整数

转载 作者:行者123 更新时间:2023-11-30 10:16:42 25 4
gpt4 key购买 nike

我对 Generics 还是个新手,我想知道为什么我不能做“if(b[m] > key)”这可能是一件非常简单的事情,我太累了以至于没注意到。但是正如您所看到的,我正试图在整数数组中找到某个数字。我究竟做错了什么?它必须是通用方法。

public class Question1<T>
{
/**
* This method searches through the array of integers to check if they match the key.
* @param b array
* @param key certain number
*/
public static <T> void search(T[] b,T key)
{
int l = 0;
int r = b.length - 1;
while (l <= r)
{
int m = (l + (r-l)/2);
if(b[m].equals(key))
System.out.println("Key: " + key.toString()+ " is in Element: " + m);

if (b[m] > key)
{
l = m + 1;
}
else
{
r = m - 1;
}
}
System.out.println("Not in array.");
}
public static void main(String[] args)
{

Integer[] iray = {1,2,3,4,5};
int key = 4;
search(iray,key);
}

最佳答案

在 Java 中,泛型不能用于原始类型(int、double 等),只能用于对象(Integer、Double 等)。盒装数字 (int --> Integer) 不能使用比较运算符(除了 ==,但在这种情况下它的行为不是您想要的)。要解决您的问题,您有两种解决方案:

使您的 T 泛型成为可比较的(通过定义 )。完成后,替换

b[m].equals(key)

key.compare(b[m]) < 0

请注意,由于数组中每个值的装箱,它不是很优化。这是 Java 的一个麻烦的限制。目前,正在进行一项尝试解决该问题的工作,并允许泛型与原始值一起使用。它叫做the Valhalla project .

如果您想要优化的解决方案,您不得不采用与标准 java.util.Arrays 类中相同的策略:为每个基本类型复制您的 etod,而不使用泛型。

希望对您有所帮助!

关于java - 如何使用泛型方法在数组中查找整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49935558/

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