我有一个未排序的对象列表。每个对象都包含一个唯一的搜索键。这是一些示例代码:
import java.util.*;
class Dog {
private final String nameKey;
private final String owner;
private final int age;
private final int weight;
Dog(String n, String o, int a, int w) {
nameKey = n;
owner = o;
age = a;
weight = w;
}
String getName() {
return nameKey;
}
String getOwner() {
return owner;
}
int getAge() {
return age;
}
int getWeight() {
return weight;
}
}
public class SearchThoughList {
public static void main(String[] args) {
List<Dog> dogList = new ArrayList<>();
int i=0;
String searchString;
dogList.add(new Dog("squire", "tom:", 10, 40));
dogList.add(new Dog("lucy","tom", 5, 37));
dogList.add(new Dog("gretta", "bob", 12, 22));
dogList.add(new Dog("lassie", "timmy", 7, 55));
dogList.add(new Dog("bailey", "bob", 5, 100));
searchString = "lassie";
// Here's where I need help
// i = SomeClass.searchMethod(dogList, searchString);
//
System.out.println(searchString+" is at index: "+i);
}
}
问题1: 搜索列表并找到其键等于搜索值的元素有什么好方法?显然,由于列表未排序,我需要遍历整个事情直到找到密钥。我可以编写代码来做到这一点。但是,作为Java和OOP的新手,我想知道是否已经存在一个类/方法来实现这一点 - 更多的是在OOP范式的精神中。
问题2: 假设列表已排序,是否存在比ArrayList更好的结构?那么我假设存在一个可以使用二进制搜索的类/方法?
提前致谢。
答案 0 :(得分:0)
我将使用的是增强的for循环。使用方法如下:
for(Dog e : dogList){
//Do stuff with e (which is a dog object)
}
您也可以使用Iterator模式,迭代器是一个为您循环遍历列表的对象。您可以在oracle网站上找到更多信息: http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html
当你想使用二进制搜索时,数组列表就完全可以了。