сравнивая arraylist и связанный список ... мой код неправильный? - PullRequest
0 голосов
/ 18 марта 2011

Я спросил в другом вопросе, почему при чтении файла и создании списков arraylist показался быстрее связанного списка.Я сейчас попытался добавить в начало или конец списка.Arraylist был еще быстрее.

Я просто хочу убедиться, что я правильно использую эти вещи.вот что я делаю:

public class LinkedListTest {

    private List<String> Names;

    public LinkedListTest(){
            Names = new LinkedList<String>();
    }

Тогда я просто использую методы связного списка, т.е. "Names.add (strings)".И когда я проверял arraylists, это почти идентично:

public class ArrayListTest {

    private List<String> Names;

    public ArrayListTest(){
            Names = new ArrayList<String>();
    }

Я делаю это правильно?Фактически, изменение типа списка в методе конструктора с ArrayList на LinkedList было в значительной степени ЕДИНСТВЕННЫМ изменением, которое я сделал в коде при сравнении скоростей.Это правильный путь?

РЕДАКТИРОВАТЬ: О, и я просто делаю System.currentTimeMillis () до и после функции добавления для измерения времени.

Ответы [ 3 ]

0 голосов
/ 18 марта 2011

Тогда я просто использую методы связного списка то есть "Names.add (строки)". И когда я проверенные arraylists, это почти тождественны:

Как ты тестировал? Обычно это делается путем измерения времени, которое требуется для выполнения одной и той же операции, миллионы раз, за ​​которыми следует простое деление.

0 голосов
/ 18 марта 2011

Да, вы используете их правильно.Сколько данных вы тестируете?Если набор данных слишком мал, вы можете не получить хороших результатов теста, потому что могут появиться специальные оптимизации, которые искажают результаты.Для вашего времени вы должны усреднить время на протяжении многих тестовых прогонов, чтобы убедиться, что скачки нагрузки на процессор и другие скачки ресурсов усреднены.

Не знаю точно, но я бы предложил попробовать разные объемы тестаданные - возможно, увеличится в 10 раз и посмотрите, видите ли вы линейное изменение производительности.Например, вы можете протестировать каждый список с 100 элементами, 1000, 10000, 100000 и 1000000 и посмотреть, является ли разница линейной и как сравниваются реализации.

Может быть интересно проверить время, которое требуется длявставьте элемент в середину списка, помимо вставки в начале и конце.

0 голосов
/ 18 марта 2011

Простые дельты времени хороши, если вы хотите что-то простое, однако для дальнейшего использования, если вы хотите что-то более сложное, проверьте это:

http://www.ibm.com/developerworks/java/library/j-benchmark1.html

...