当前位置: 首页 > 知识库问答 >
问题:

使用泛型的线性搜索方法不工作

叶景龙
2023-03-14

我是java的新手。我试图创建一个线性搜索类,它可以采用任何类型,并在列表中找到它。

package Client.LinearSearch;

    
import java.util.ArrayList;
import java.util.List;

public class LinearSearch<E> {
    public static <E> int Search(ArrayList<E> list, E key) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).equals(key)) {
                return i;
            }
        }
        return 0;
    }
}

但当我尝试使用此方法进行搜索时,它显示该方法无法应用于以下类型。线性搜索是从对象列表中提取的,而toSearch是用户定义的

List<String>nameList=new ArrayList<>();
            for(Employee employee:employeeList){
                nameList.add(employee.getName());
            }
            System.out.println("Enter name: ");
            String toSearch=sc.nextLine();
LinearSearch<String> stringLinearSearch=new LinearSearch<String>();
int index=stringLinearSearch.Search(nameList,toSearch);

![在此输入图片说明][1]

错误消息:

java: method Search in class Client.LinearSearch.LinearSearch<E> cannot be applied to given types;
 required: java.util.ArrayList<E>,E
  found:    java.util.List<java.lang.String>,java.lang.String
  reason: cannot infer type-variable(s) E
    (argument mismatch; java.util.List<java.lang.String> cannot be converted to java.util.ArrayList<E>)

共有1个答案

萧晔
2023-03-14

您可能需要放松list参数的类型。您不一定需要ArrayList;任何旧的List都可以。所以像这样的方法定义可能会有所帮助:

public static <E> int Search(List<E> list, E key) {

顺便说一下,如果没有找到元素,返回0会使它看起来像是真正找到了元素(在索引0处)。考虑返回像-1这样的东西(许多indexOf函数的约定)。

 类似资料:
  • 我试图搜索任何数据类型(Int、Strings、Chars等)的数组查看是否存在与您输入的元素匹配的元素。您应该返回匹配元素的索引。有两个类正在使用。 我得到的错误是: 它的建议是使方法静态,但是,这样做会在Search类中出现错误: 搜索类: 跑步者等级: 在这种情况下,最好的解决方案是什么? 谢谢

  • 本文向大家介绍C++递归线性阵列搜索数字的方法,包括了C++递归线性阵列搜索数字的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++递归线性阵列搜索数字的方法。分享给大家供大家参考。具体如下: 这里采用递归方法搜索阵列的数字,发现返回index,未发现范围a -1。 希望本文所述对大家的C++程序设计有所帮助。

  • 线性搜索是一种非常简单的搜索算法。 在这种类型的搜索中,逐个对所有项目进行顺序搜索。 检查每个项目,如果找到匹配项,则返回该特定项目,否则搜索将继续,直到数据收集结束。 算法 (Algorithm) Linear Search ( Array A, Value x) Step 1: Set i to 1 Step 2: if i > n then go to step 7 Step 3: if A

  • 此代码在Java 8中编译,但在Java 7中编译失败: 它不能推断从映射返回的映射的具体类型。空(): 如果将调用更改为f(Map),则会编译。 但是如果您将调用更改为f(Map.empty())。放(1,“A”)。put(2,“B”)) ,它无法在Java 7和8上再次编译。为什么?

  • 安吉丽卡·兰格(Angelica Langer)在关于仿制药的常见问题解答中说(参见Technicalities.FAQ822): 如果这些方法具有具有不同边界的类型参数,则它们不会重写,因为这些方法的签名不是重写等价的。请记住,类型参数边界是泛型方法签名的一部分。 示例(泛型子类型方法重载泛型超类型方法;不推荐): 我不明白为什么方法在类中重载。据我所知,这应该是一个编译时错误,因为在和中具有相

  • 我一直在尝试泛型,很快我就遇到了一些我无法解释的事情 例如: 我不明白