Java 常规线性搜索-无法使用字符串在ArrayList中搜索
我正在尝试创建一个方法,用它可以在ArrayList中搜索特定的整数或字符串。 我已经设法让它在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>();
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) {