Мой код работает очень долго, но моя программа говорит мне иначе - PullRequest
2 голосов
/ 13 мая 2019

Итак, в настоящее время я пытаюсь проверить, сколько времени занимает заполнение AVLTree различными объемами данных. При добавлении небольших объемов данных в дерево, таких как 16 объектов или 2824 объекта, моя программа может работать в течение нескольких секунд (я использую свой телефонный секундомер для записи времени). Однако когда я добавляю ~ 11000 объектов в дерево, это занимает около 28 секунд, а когда я пытаюсь добавить 250000 объектов в дерево, моя программа, кажется, никогда не завершает работу.

В программе я добавил переменную, которая хранит текущее время в начале кода, и другую переменную, которая также хранит текущее время в конце, чтобы я мог приблизительно рассчитать, сколько времени потребовалось программе для запуска. Что интересно, так это то, что когда я заполнил AVLTree 2824 объектами, он говорит, что для запуска потребовалось ~ 1,56 секунды, а когда я заполнил AVLTree ~ 11000 объектов, очевидно, для запуска потребовалось то же время.

Использование моего секундомера, чтобы увидеть, что для запуска потребовалось ~ 28 секунд, по сравнению с ~ 1,56 секунды, которые моя программа сообщает мне, что это действительно затрудняет понимание того, что действительно вызывает проблему. Кстати, компилятором, который я сейчас использую, является Eclipse Java Oxygen.

public class AVLTreeTester {
    public static void main(String[] args) {
    long start = System.currentTimeMillis();
        AVLTree<IPAddress, URL> avlTree = new AVLTree<IPAddress, URL>();
    BufferedReader br = null;
    String line;

    try {
        br = new BufferedReader(new FileReader("src/data/top- 
                250k.txt"));

        while ((line = br.readLine()) != null) {
            String[] values = line.split("\t");
        IPAddress newIP = new IPAddress(values[1]);
        URL newURL = new URL(values[0]);

        avlTree.add(newIP, newURL);
        }

    }catch (IOException e) {
            e.printStackTrace();
    }

    avlTree = null;
    long stop = System.currentTimeMillis();
    double time = stop - start / 1000;
    System.out.println("Took: " + time + " second(s)");
    }
}
...