从文件

时间:2018-06-21 18:12:15

标签: java performance

我已经建立了具有预定最大级别的N叶树。

我要填写的数据约为1.5亿个字符。

我填充树的方法是创建一个长度等于最大级别的list<Character>,然后调用addNodes(List<Character>)方法。(源代码在下面)

现在的问题是,最大级别越高,花费的时间越长,这是显而易见的。使用level = 6大约需要4分钟,而使用level = 7则需要20分钟。

我正在寻找的是一种可能并行填充树的方法(我不知道该怎么做,甚至根本无法受益)或使填充过程更有效,内存不是问题(目前至少)。

源代码:

节点:

public class Node {
    Node parent;
    List<Node> children;
    Character keyvalue;
    int count;

    //Constructors & getter and setter methods
    }

树:

public class Tree{
    Node root

    public void addListToTree(List<Character> list){
        //check if list.isEmpty
        if(root.children.isEmpty()){
            Node parent = root;

            for (Character e : list) {
                Node node = new Node(parent, e, 1, 0);
                parent.addChildren(node);
                parent = node;
            }
        } else {
            Node tmp = root;

            for (int i = 0; i < list.size(); i++) {
                Node node = new Node(null, list.get(i), 1, 0);

                if (-1 != tmp.getChildIndex(node)) {
                    tmp = tmp.getChild(node);
                    tmp.setCount(1); //increments counter by 1
                } else {
                    node.setParent(tmp);
                    tmp.addChildren(node);
                    tmp = node;
                }
            }
        }
    }
}

ReadFileContents:

public void start() {

    String file_contents = "";
    try {
        FileReader fr = new FileReader(new File(filepath));
        BufferedReader br = new BufferedReader(fr);

        String tmp;
        while ((tmp = br.readLine()) != null) {
            file_contents += tmp;
        }
        br.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    ArrayList<Character> tmp = new ArrayList<Character>();
    for (char e : file_contents.toCharArray()) {
        tmp.add(e);
        // System.out.println("Chunksize: " + chunksize);
        if (chunksize == tmp.size()) {
            toTrain.addListToTree(tmp);
            tmp.remove(0);
        }
    }
    while (tmp.size() > 0) {
        toTrain.addListToTree(tmp);
        tmp.remove(0);
    }
}

0 个答案:

没有答案