Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208

Что такое 2-ух связзний список?

29.05.2013, 19:04. Показов 1397. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что такое 2-ух связзний список? И имееться ли такой в Java?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.05.2013, 19:04
Ответы с готовыми решениями:

Что такое инвертированный список в Java и как он связан с обыкновенным инвертированным списком?
Что такое инвертированный список в Java и как он связан с обыкновенным инвертированным списком? Что это вообще такое простыми словами...

Что такое монитор и что такое мьютекс? Это же разные вещи?
Здравствуйте. В разных айти-статьях по-разному используют эти термины, причём часто их путают друг с другом. Хотелось бы, чтобы кто-нибудь...

Что такое список определений?
В справочнике читаем: <DL> <DT>Определяемый термин <DD>определение термина </DL> А что это такое по своей сути? Можно...

14
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
29.05.2013, 19:06
LinkedList
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
29.05.2013, 19:17
Односвязный список - каждый элемент имеет ссылку на следующий элемент. Двусвязный список - каждый элемент имеет ссылку как на следующий, так и на предыдйщий элемент.
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
29.05.2013, 20:23  [ТС]
Значит LinkedList? В каких случаях он используется? Или когода его удобно использовать?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
29.05.2013, 21:27
Отличие LinkedList от ArrayList в первую очередь - малое время вставки и удаления элементов из начала и середины списка.
Соответственно, LinkedList стоит использовать если у вас есть список с большим кол-вом элементов, и вам нужно часто производить операции вставки/удаления в него.

На самом деле, использование ArrayList-а является предпочтительным почти всегда. ArrayList более кэш-friendly, что дает очень большой выигрыш.
1
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
29.05.2013, 21:30  [ТС]
turbanoff, а что лучше из этих двух если нужно часто перебирать элементы и если очень! важна связь между этими элементами?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
29.05.2013, 21:31
можно ещё добавить что на миллионных количествах данных арейлист (так как бакенд арей) ещё и выигрывает по скорости у линкеда
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
29.05.2013, 21:32  [ТС]
mutagen,
Цитата Сообщение от turbanoff Посмотреть сообщение
LinkedList стоит использовать если у вас есть список с большим кол-вом элементов
кто прав?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
29.05.2013, 21:34
Цитата Сообщение от animator404 Посмотреть сообщение
кто прав?
вопрос не в том кто прав, а какие операции будут преобладать

как сказал turbanov, вставка-удаление в центре - линкед лист, остальное арей
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
29.05.2013, 22:06
Цитата Сообщение от mutagen Посмотреть сообщение
можно ещё добавить что на миллионных количествах данных арейлист (так как бакенд арей) ещё и выигрывает по скорости у линкеда
кстате, а чего?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
29.05.2013, 23:25
отакое http://elizarov.livejournal.com/18000.html
2
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
30.05.2013, 11:56
Цитата Сообщение от turbanoff Посмотреть сообщение
Отличие LinkedList от ArrayList в первую очередь - малое время вставки и удаления элементов из начала и середины списка.
А время на поиск позиции? Вы уверены, что перебрать 50000 элементов будет быстрее, чем скопировать хвост через arraycopy?

Вот, набросал тест. Вставка на 10% от начала, в середину и на 10% от конца. Всего изначально 1 000 000 элементов, вставляется 1000. Размер ArrayList выбран достаточным, чтобы исключить расширение массива.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package ru.skipy.tests;
 
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
 
/**
 * ListPerformanceTest
 *
 * @author Eugene Matyushkin aka Skipy
 * @since 30.05.13
 */
public class ListPerformanceTest {
 
    private static final int COUNT = 1000;
    private static final int ELEMENTS = 1000000;
    private static final Integer ELEMENT = -1;
    private static final int ITERATIONS = 10;
 
    public static void main(String[] args) {
        List<Integer> arrayList = new ArrayList<>(ELEMENTS * 2);
        testList(arrayList);
 
        List<Integer> linkedList = new LinkedList<>();
        testList(linkedList);
    }
 
    static void testList(List<Integer> list) {
        long meanBeg = 0;
        long meanMid = 0;
        long meanEnd = 0;
        long start;
        long end;
        for (int i = 0; i < ITERATIONS; i++) {
            list.clear();
            fillList(list);
            start = System.currentTimeMillis();
            insertBeg(list);
            end = System.currentTimeMillis();
            meanBeg += end - start;
            System.out.println(list.getClass().getName() + ", beginning: " + (end - start));
            list.clear();
            fillList(list);
            start = System.currentTimeMillis();
            insertMid(list);
            end = System.currentTimeMillis();
            meanMid += end - start;
            System.out.println(list.getClass().getName() + ", middle: " + (end - start));
            list.clear();
            fillList(list);
            start = System.currentTimeMillis();
            insertEnd(list);
            end = System.currentTimeMillis();
            meanEnd += end - start;
            System.out.println(list.getClass().getName() + ", end: " + (end - start));
        }
        System.out.println(list.getClass().getName() + " mean times: beginning=" + (meanBeg / 10L) +
                ", middle=" + (meanMid / 10L) + ", end=" + (meanEnd / 10L));
    }
 
    static void fillList(List<Integer> list) {
        for (int i = 0; i < ELEMENTS; i++) {
            list.add(i);
        }
    }
 
    static void insertBeg(List<Integer> list) {
        int pos = list.size() / 10;
        for (int i = 0; i < COUNT; i++) {
            list.add(pos, ELEMENT);
        }
    }
 
    static void insertMid(List<Integer> list) {
        int pos = list.size() / 2;
        for (int i = 0; i < COUNT; i++) {
            list.add(pos, ELEMENT);
        }
    }
 
    static void insertEnd(List<Integer> list) {
        int pos = (list.size() / 10) * 9;
        for (int i = 0; i < COUNT; i++) {
            list.add(pos, ELEMENT);
        }
    }
}
Любопытные результаты получились:

Code
1
2
java.util.ArrayList mean times: beginning=1534, middle=480, end=57
java.util.LinkedList mean times: beginning=967, middle=4513, end=968
С ArrayList предсказуемо - чем дальше, тем меньше проходит через arraycopy. А вот время вставки в конец LinkedList совпало со вставкой в начало. Это навело на мысль, что поиск оптимизирован. И действительно, поскольку LinkedList двунаправленный, то при позиции из второй половины списка перебор идет от последнего элемента. Если поставить 20% от конца - время увеличится в два раза. Кстати, и в случае ArrayList тоже в два раза, но уже по другой причине - в два раза больше через arraycopy проходит.

Ну и если сравнивать сами коллекции (с чего всё началось!) - вставка в середину списка из миллиона элементов в случае ArrayList на порядок (!) быстрее, чем у LinkedList. Именно по причине долгого поиска и хорошо оптимизированного копирования. В хвосте ArrayList тоже выигрывает. И только в начале проигрывает из-за больших объемов копирования хвоста.

Так что... надо серьезно смотреть на алгоритмы использования. И, возможно, менять их.
1
30.05.2013, 13:32

Не по теме:

Цитата Сообщение от Skipy Посмотреть сообщение
Ну и если сравнивать сами коллекции (с чего всё началось!) - вставка в середину списка
Началось все все таки с начала списка
Цитата Сообщение от turbanoff Посмотреть сообщение
малое время вставки и удаления элементов из начала и середины списка.

0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
30.05.2013, 13:34
пасибо мужики. реально крутая инфа
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
30.05.2013, 13:49
Цитата Сообщение от Skipy Посмотреть сообщение
Так что... надо серьезно смотреть на алгоритмы использования. И, возможно, менять их.
в 8ке раннем релизе, я уже обнаружил мультипоточную сортировку вставками
надо будет глянуть, может и реализацию листов переписали

возможно и арейлист, надо переписать на мультиарейлист (чтобы внутри он был из кучи маленьких массивов) и сократить таким образом сдвиги всего массива на втык в начало, он тогда станет просто уделывать все остальные коллекции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2013, 13:49
Помогаю со студенческими работами здесь

Что такое линейный односвязный список?
Люди, помогите разобраться со связными структурами данных, а именно с линейным односвязным списком. Очень-очень нужно написать...

Параметризованный список что это может быть такое
Есть задание: Создать класс Студент. Студенты должны заноситься в параметризованный список. У студента должны присутствовать поля: ФИО,...

Что такое односвязный список и как его реализовать
Господа, что такое односвязный список и как его реализовать в шарпе. Всем спасибо

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Что такое IIS и что такое PWS? Почему одно без другого не работает?
вот уже второй день пытаюсь немного разобраться в АСП. накидал небольшую тестовую страничку. но с серверами я ничего не понимаю! что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru