Java 常规线性搜索-无法使用字符串在ArrayList中搜索

Java 常规线性搜索-无法使用字符串在ArrayList中搜索,java,Java,我正在尝试创建一个方法,用它可以在ArrayList中搜索特定的整数或字符串。 我已经设法让它在ArrayList中搜索整数,但是当我试图搜索字符串时,我无法让它正常工作。 这是我的密码: import java.util.*; public class Search <T> { public static void main(String[] argv) { Search<T> search = new Search<T>();

我正在尝试创建一个方法,用它可以在ArrayList中搜索特定的整数或字符串。 我已经设法让它在ArrayList中搜索整数,但是当我试图搜索字符串时,我无法让它正常工作。 这是我的密码:

    import java.util.*;
public class Search <T> {


public static void main(String[] argv) {

    Search<T> search = new Search<T>();

    ArrayList<Integer> alist = new ArrayList<Integer>();
    alist.add(1);
    alist.add(3);
    alist.add(5);
    alist.add(7);

    int num = 5;


    ArrayList<String> alist2 = new ArrayList<String>();
    alist2.add("A");
    alist2.add("B");
    alist2.add("C");
    alist2.add("D");

    String word = "C";


    System.out.println(search.linearSearch(alist, num));

    System.out.println(search.linearSearch(alist2, word));


}

public int linearSearch(ArrayList<T> rrr, T wordnum) {
    for (int i=0; i < rrr.size(); i++) {
        if (wordnum.equals(rrr.get(i))) {
            return i;

        };
    };
    return -1;
}
}

我得到的错误是无法对上的非静态类型T进行静态引用

Search<T> search = new Search<T>();
我是泛型新手,非常感谢您的帮助

当您声明搜索时,它必须由某个类参数化。 你的情况是

Search<Integer> search = new Search<Integer>();//to find int
Search<String> search = new Search<String>();//to find string

在中创建搜索类实例的方式不正确

Search<T> search = new Search<T>();
然后创建一个Search的实例,并调用这个方法。将根据您传递的列表推断类型:

Search search = new Search();

System.out.println(search.linearSearch(alist, num));   // T inferred as Integer
System.out.println(search.linearSearch(alist2, word)); // T inferred as String
参考资料:


使类不带参数T,并使用参数T定义静态函数

public static <T> int linearSearch(List<T> rrr, T wordnum) {
所以你可以调用Search.linearSearch

否则@NKukhar的回答就应该完成了。 此外,在API中启用比ArrayList更通用的列表也是更好的样式

class Search {

    /** For generic method, you define the type parameter in angular brackets, 
        before the return type
    **/
    public <T> int linearSearch(ArrayList<T> rrr, T wordnum) {
        for (int i=0; i < rrr.size(); i++) {
            if (wordnum.equals(rrr.get(i))) {
                return i;
            }
        }
        return -1;
    }
}
Search search = new Search();

System.out.println(search.linearSearch(alist, num));   // T inferred as Integer
System.out.println(search.linearSearch(alist2, word)); // T inferred as String
public static <T> int linearSearch(List<T> rrr, T wordnum) {