【问题标题】:Search an Unsorted List搜索未排序的列表
【发布时间】:2015-04-23 09:58:25
【问题描述】:

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

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

提前致谢。

【问题讨论】:

    标签: list object search


    【解决方案1】:

    我会使用增强的 for 循环。使用方式如下:

    for(Dog e : dogList){
        //Do stuff with e (which is a dog object)
    }
    

    您也可以使用迭代器模式,迭代器是一个为您循环遍历列表的对象。您可以在 oracle 网站上找到更多信息: http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html

    当你想使用二分查找时,Array List 就完美了。

    【讨论】:

    • 使用这个结构,当我找到匹配元素时,我必须使用dogList.indexOf(e) 来获取匹配元素的索引。鉴于此,使用for (int i=0; i&lt;dogList.size(); i++) { 逐步浏览列表不是更好吗?这样,当我找到匹配项时,我已经有了索引。
    • 是的,抱歉确实更好。我没有意识到你需要索引,虽然你只需要对象。
    猜你喜欢
    • 2017-03-16
    • 2021-09-09
    • 2011-03-12
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多