搜索未排序的列表

时间:2015-02-21 20:07:18

标签: list object search

我有一个未排序的对象列表。每个对象都包含一个唯一的搜索键。这是一些示例代码:

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更好的结构?那么我假设存在一个可以使用二进制搜索的类/方法?

提前致谢。

1 个答案:

答案 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

当你想使用二进制搜索时,数组列表就完全可以了。