【发布时间】:2015-08-03 20:12:06
【问题描述】:
我正在尝试对linked list 进行线性搜索。一个搜索是int,另一个是String。我究竟做错了什么? **根据建议更新了代码。
主内
public static LinkedList<Contributor> contributorList = new LinkedList<>();
String searchKey = "Jones";
int intSearchKey = 45;
System.out.println("Search key " + searchKey + " is found? " + sequentialSearch(contributorList, searchKey));
System.out.println("Search key " + intSearchKey + " is found? " + sequentialSearch(contributorList, intSearchKey));
Called methods
public static <Contributor> boolean sequentialSearch(Iterable<Contributor> contributorList, int intSearchKey) {
Iterator<Contributor> iter = contributorList.iterator();
while (iter.hasNext()) {
if (iter.next().equals(intSearchKey)) {
return true;
}
iter = (Iterator<Contributor>) iter.next();
}
return false;
}
public static <Contributor> boolean sequentialSearch(Iterable<Contributor> contributorList, String searchKey) {
Iterator<Contributor> iter = contributorList.iterator();
while (iter.hasNext()) {
if (iter.next().equals(searchKey)) {
return true;
}
iter = (Iterator<Contributor>) iter.next();
}
return false;
}
【问题讨论】:
-
我在你的代码中没有看到链表。
-
你实现的东西最好用
search而不是contains来描述——你的方法不会返回T项目。 -
为什么不直接使用
contributorList.contains(key)? -
一个
Iterable不是一个链表(而是一个LinkedList是一个Iterable)。因此,您的问题实际上是关于检查可迭代对象中的包含情况,因为sequentialSearch方法与链表结构无关。此外,使用名称collection调用Iterable会变得相当混乱,即使是中等大小的代码。 -
真正的问题是什么?您基本上只是告诉我们它不起作用,而没有告诉我们如何它不起作用。您的代码也有点令人困惑,因为您的代码似乎存在于方法块之外,但可能存在于方法块内部(如
sequentialSearch (contributorList, "Jones");)。如果没有看到您正在使用的实际代码,很难提供帮助。
标签: java search linked-list linear-search