在对象数组中搜索字符串

时间:2013-04-13 06:32:46

标签: java algorithm

我有一个包含自我引用对象的ArrayList的Object。该ArrayList中的每个Object包含最多n度的相同结构。现在我必须在结构中搜索一个字符串,如果发现我必须一直打印到根。这是一个样本

MyClass {
string name;
ArrayList<MyClass> subClasses;
}

哪种数据结构最适合这样做。或者我不需要使用它。

亲切的问候

2 个答案:

答案 0 :(得分:2)

你可以在MyClass上有一个方法,如下面的

public List<String> findPathOfName(String nameToFind) {
    List<String> result = new ArrayList<String>();

    if (nameToFind.equals(name)) {
      result.add(name);
    } else {
      for (MyClass aSubClass: subClasses) {
        List<String> subResult = aSubClass.findPathOfName(nameToFind);
        if (!subResult.isEmpty()) {
           result.add(name);
           result.addAll(subResult);
           break;
        }
      }
    }

    return result;
}

基本上递归地遍历结构并找到路径。返回列表将包含类似personA / personB / etc的路径。

答案 1 :(得分:1)

这是http://en.wikipedia.org/wiki/Composite_pattern。试试我的版本

static class MyClass {
    String name;
    List<MyClass> subClasses;

    MyClass(String name) {
        this.name = name;
    }

    String search(String s, String path) {
        if (!path.isEmpty()) {
            path += "->";
        }
        path += name;
        if (!s.equals(name)) {
            if (subClasses == null) {
                return null;
            }
            for (MyClass c : subClasses) {
                return c.search(s, path);
            }
        }
        return path;
    }
}

public static void main(String[] args) throws Exception {
    MyClass c1 = new MyClass("c1");
    MyClass c2 = new MyClass("c2");
    MyClass c3 = new MyClass("c3");
    c1.subClasses = Arrays.asList(c2);
    c2.subClasses = Arrays.asList(c3);
    System.out.println(c1.search("c3", ""));
}

输出

c1->c2->c3