getChildren () может быть гораздо более эффективным. Похоже, что каждый раз, когда вы вызываете его, вы перебираете весь CompanyList, чтобы найти тех, чей родитель соответствует указанному CompanyId. Это просто кричит о Hashtable, заполненном векторами. Ключами Hashtable будут родительский идентификатор, а не исходный идентификатор; значениями будут векторы, которые содержат компанию, чей родительский идентификатор соответствует данному родительскому идентификатору Тогда у вас есть:
private Vector getChildren(int CompanyId, Hashtable companyParentLoookup) {
return (Vector) companyParentLookup.get(CompanyId);
}
Конечно, похоже, что ваша цель при написании getSubTree - создать Hashtable, который я только что описал. Проблема здесь в том, что вы пытаетесь создать его по идентификатору компании, а не по компании. Вы можете попробовать это вместо этого, чтобы построить companyParentLookup:
private Hashtable calcLookupTable(CompanyList _companyList) {
Hashtable retval = new Hashtable();
for (Enumeration e = _companyList.elements(); e.hasMoreElements();) {
Company temp_comp = (Company) e.nextElement();
Integer parent_id = temp_comp.getParentCompanyID();
if (retval.containsKey(parent_id) == false) {
retval.put(parent_id, new Vector());
}
retval.get(parent_id).add(temp_comp);
}
return retval;
}
После этого вы можете вставить структуру companyParentLookup непосредственно в nodeLuctru.comList.
РЕДАКТИРОВАТЬ: Важным моментом здесь является то, что вы можете лениво инициализировать векторные записи Hashtable по мере необходимости; каждый раз, когда вы можете просто проверить, есть ли в Hashtable нужная запись, а если нет, просто добавьте ее. Это то, что позволяет создавать Hashtable, итерируя компании как дети, а не как их родители , Если вы действительно не можете использовать ничего, кроме Hashtables и Vectors, то это не плохой способ реализовать дерево; это примерно эквивалентно сохранению структуры данных графа с использованием списков смежности. На самом деле я написал что-то очень похожее на структуру данных графа, хотя и с HashMaps.
Э-э, это помогает?