Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создать дерево из set 
V
    Опции темы
Samotnik
Дата 24.11.2010, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



а вот это случайно не то что мне и нужно ? 
Ты про примерно такую реализацию мне говоришь ? smile 
PM MAIL   Вверх
Temdegon
Дата 24.11.2010, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: 7
Всего: 9



да, такая.
почитай на вики про ДЕРЕВО
лишним не будет
PM MAIL   Вверх
Samotnik
Дата 2.12.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



сегодня продолжил. 
Не понимаю, как использовать этот класс ? Как создать объект parent класса TreeElement  из обычного String - Sport  ?
И еще вопрос. Что значит parent ? это только самый верхний первый элемент ? 
 smile 
PM MAIL   Вверх
nc30
Дата 2.12.2010, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



Samotnik, вроде бы есть готовые решения по деревьям, которые здесь уже обсуждались... 

Хотя вы это скорее всего уже видели, и я напрасно влезаю в обсуждение  smile 
PM MAIL   Вверх
Temdegon
Дата 3.12.2010, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: 7
Всего: 9



поле parent тебе не обязательно. это ссылка на родительский элемент.
String - Sport - это просто дополнительное поле в классе TreeElement.
В общем, на примере javax.swing.tree.DefaultMutableTreeNode

Код

        DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
    DefaultMutableTreeNode sport = new DefaultMutableTreeNode("Sport");
    DefaultMutableTreeNode video = new DefaultMutableTreeNode("Video");
    DefaultMutableTreeNode art = new DefaultMutableTreeNode("Art");
    DefaultMutableTreeNode men = new DefaultMutableTreeNode("Men");
    DefaultMutableTreeNode women = new DefaultMutableTreeNode("Women");
    root.add(sport);
    root.add(video);
    root.add(art);
    sport.add(men);
    sport.add(women);
    // как добавить остальные думаю понятно

Если нужен какой-то дополнительный функционал - расширяй этот класс, или implements MutableTreeNode;

PM MAIL   Вверх
Samotnik
Дата 3.12.2010, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Сделал вот так. Вроде все так как и надо. Хочу критики  smile 
Код

package com.de.treeView;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class CategoryCompatibility {
    
    private static final Log logger = LogFactory.getLog(CategoryCompatibility.class);
    
    public static class Tree {
         
        private NodeTree rootElement;
         
        public Tree() {
            super();
        }
     
        public NodeTree getRootElement() {
            return this.rootElement;
        }
     
        public void setRootElement(NodeTree rootElement) {
            this.rootElement = rootElement;
        }
         
        public List<NodeTree> toList() {
            List<NodeTree> list = new ArrayList<NodeTree>();
            walk(rootElement, list);
            return list;
        }
         
        public String toString() {
            return toList().toString();
        }
         
        private void walk(NodeTree element, List<NodeTree> list) {
            list.add(element);
            for (NodeTree data : element.getChildren()) {
                walk(data, list);
            }
        }
    }

    public static class NodeTree {
     
        private String data;
        private List<NodeTree> children;
        private String reference;

        public NodeTree() {
            super();
        }
     
        public NodeTree(String data) {
            this();
            setData(data);
        }
        
        public NodeTree(String data, String reference) {
            this();
            setData(data);
            setReference(reference);
        }
         
        public List<NodeTree> getChildren() {
            if (this.children == null) {
                return new ArrayList<NodeTree>();
            }
            return this.children;
        }
     
        public void setChildren(List<NodeTree> children) {
            this.children = children;
        }
     
        public int getNumberOfChildren() {
            if (children == null) {
                return 0;
            }
            return children.size();
        }
         
        public void addChild(NodeTree child) {
            if (children == null) {
                children = new ArrayList<NodeTree>();
            }
            children.add(child);
        }
         
        public void insertChildAt(int index, NodeTree child) throws IndexOutOfBoundsException {
            if (index == getNumberOfChildren()) {
                // this is really an append
                addChild(child);
                return;
            } else {
                children.get(index); //just to throw the exception, and stop here
                children.add(index, child);
            }
        }
         
        public void removeChildAt(int index) throws IndexOutOfBoundsException {
            children.remove(index);
        }
     
        public String getData() {
            return this.data;
        }
     
        public void setData(String data) {
            this.data = data;
        }        
         
        public String getReference() {
            return reference;
        }

        public void setReference(String reference) {
            this.reference = reference;
        }

        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append("{").append(getData().toString()).append(",[");
            int i = 0;
            for (NodeTree e : getChildren()) {
                if (i > 0) {
                    sb.append(",");
                }
                sb.append(e.getData().toString());
                i++;
            }
            sb.append("]").append("}");
            return sb.toString();
        }
    }

    
    public static void makeCompatibility() {
        try {
            File file = new File("c:\\temp\\1\\Categories.xml");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(file);
            doc.getDocumentElement().normalize();
            Tree tree = new Tree();
            NodeTree nodeTree = new NodeTree("category");
            tree.setRootElement(nodeTree);
            parseXML(doc.getDocumentElement().getChildNodes(), tree.getRootElement());
            logger.info("hello");
        } catch (ParserConfigurationException e) {
            logger.error(e, e);
        } catch (IOException e) {
            logger.error(e, e);
        } catch (SAXException e) {
            logger.error(e, e);
        }
    }
    
    private static void parseXML(NodeList childnodes, NodeTree tree) {
        for(int i = 0; i < childnodes.getLength(); i++) {
            Node node = childnodes.item(i);
            if(node.getNodeType() == Node.ELEMENT_NODE) {
                NodeTree nodeTree = new NodeTree(node.getAttributes().getNamedItem("name").getTextContent(),
                                            node.getAttributes().getNamedItem("reference") != null ?
                                                    node.getAttributes().getNamedItem("reference").getTextContent() : "test");
                tree.addChild(nodeTree);
                parseXML(node.getChildNodes(), nodeTree);
            }
        }
    }
}



Добавлено через 9 минут и 42 секунды
Цитата(nc30 @  2.12.2010,  21:20 Найти цитируемый пост)
Samotnik, вроде бы есть готовые решения по деревьям, которые здесь уже обсуждались... 

Да, я видел, но дело в том, что мне нужно использовать доп поле, т.е. не просто построить дерево, а еще и каждый нод этого дерева помечать значением поле, а в DefaultMutableTreeNode такого не нашел
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0518 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.