847

Помогу бесплатно: Java и SQL

Помогу советом изучающим Java и SQL или начинающим программистам.


Не решаю задачи, не делаю ДЗ. Только объясняю что, как и почему устроено.


Рейтинг в топку, просто хочу помочь.

Помощники

243 поста785 подписчиков

Правила сообщества

Нельзя обсуждать Политику.
Ругаться и оскорблять.

Вы смотрите срез комментариев. Показать все
0
DELETED
Автор поста оценил этот комментарий

чем отличается ioc от di? передача параметров по ссылке или значению? что лучше, linkdList or arrayList? :D

раскрыть ветку (14)
1
Автор поста оценил этот комментарий

По IoC и DI рекомендую прочитать эту классическую статью: https://martinfowler.com/articles/injection.html хоть она и 2004 года, но актуальность не утратила


В Java параметры передаются по значению, ссылок в Java нет. То, что в Java называют ссылками, правильней называть указателями и тогда всё встаёт на свои места, то, что называют передачей параметров по ссылке суть просто копирования указателя.


Практически всегда надо использовать ArrayList. LinkedList это в теории полезно, на практике задачу, в которой он будет уместен, найти очень сложно.

0
Автор поста оценил этот комментарий

Ну, по очереди. linkdList и ArrayList

LinkedList реализует связный список. Он хорош когда планируется добавлять/удалять элементы в середину списка. Пример задачи: оптимизация маршрута. Есть набор точек, которые надо объехать. Нужно меняя маршрут вычислять станет лучше-хуже.

Но чтобы найти i-й элемент нужно пройти весь список.

ArrayList - хранит элементы в той последовательности, в какой они поступают. Быстрый поиск по номеру элемента. А вот добавление/удаление элементов в середину списка - просто боль.

Ещё короче: если планируется частая вставка/удаление в середину списка - то лучше LinkedList. Если обновление списка не планируется, или происходит редко, но часто нужно считать элемент с нужным индексом - то ArrayList.

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

раскрыть ветку (3)
1
DELETED
Автор поста оценил этот комментарий
Он хорош когда планируется добавлять/удалять элементы в середину списка.

на самом деле это не так :) тему с структурками нужно однозначно подтянуть, это на самом деле единственный вопрос, который был не холиварный и имел четкий ответ))) скорость вставки и удаления из обеих коллекций из середины O(n) по объекту,  O{1) по индексу из массива, О(n) из списка по прежнему (рекоменду вообще изучить почему так, именно реализации данимически расширяющегося списка и связного, их алгоритм работы), опять же стоит понимать, что linkedList в жабе реализует двусвязный список, а не обычный и например с конца элемент удалить в 2связном О(1) в отличие от односвязного, массив же удаление в среднем это O(n), изза перестроения всех элементов в массиве

однако стоит понимать, что изза механизма работы arraylist в нем можно реализовать двоичный поиск сократив время, поиска и добавления элемента в середину до O(lonN) то есть для приведенной задачи больше подходит array, да и в целом данная коллекция предпочтительнее в большом ряде задач, связанных с быстродействием и где нет ограничений по памяти, ибо данная структурка жрет больше пямяти чем списки

а вообще в рамках данной задачи на самом деле больше всего напрашивается граф)

раскрыть ветку (2)
0
DELETED
Автор поста оценил этот комментарий

а вообще в рамках данной задачи на самом деле больше всего напрашивается граф)
забыл добавить: если выходить за рамки вопроса

0
Автор поста оценил этот комментарий

Скажите пожалуйста, какие есть стандартные реализации односвязанного списка в java? В тех что я встречал, самописных, присутствовал указатель как на начало, так и на конец списка.

В этом случае удаление элемента с конца, как я понимаю, все-таки O(1)?

0
Автор поста оценил этот комментарий

Все параметры передаются по ссылке.

раскрыть ветку (2)
0
DELETED
Автор поста оценил этот комментарий

на намом деле это холиварный вопрос и у него нет правильного ответа по сути, тут важно аргументировать свою позицию?

0
Автор поста оценил этот комментарий
Всегда по значению.

Вот статья в аргументацию
https://habr.com/ru/company/otus/blog/551026/
0
Автор поста оценил этот комментарий

Ioc - инверсия управления. Это больше про фреймворки. Например, Collection Framework. У Вас, как у программиста, нет полного контроля за поведением. Вы можете только менять то, что доступно. То есть сам фреймворк управляет, а не Вы. В этом и идея инверсии управления.

Dependemcy Injection - тоже часть инверсии управления. Допустим у Вас есть приложение, которое что-то пишет в БД. Причем планируется поддержка разных СУБД. И для объектам нужен объект для работы с СУБД. Чтобы не переписывать каждый раз код заботу о создании объекта для подключения к БД можно вынести за пределы этих классов.

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

тоже холиварный вопрос года так до 18) и в нем важна так же аргументация) но на самом деле, по сути это одно и тоже, просто одно это паттерн проектирования, а другое это реализация предоставленная фреймворком

0
Автор поста оценил этот комментарий

Инверсия контроля - это принцип, согласно которому мы передаем управление созданием и распоряжением объектами фреймворку

Внедрение зависимостей это процесс внедрения в объект сущности извне (объект, заранее созданный и управляемый фреймворком во время создания контекста)

Вся эта вечеринка обеспечивает слабую связность элементов программы,  что упрощает поддержку и расширение



У arrayList константное время поиска любого элемента, почти всегда он предпочтительнее, кроме случая вставки большого числа элементов в начало коллекции, потому что все последующие элементы будут перезаписаны со сдвигом на количество вставленных элементов. LinkedList имеет линейное время поиска, предпочителен при вставке большого количества элементов в начало коллекции так как по сути там просто изменятся ссылки в нодах, в остальных случаях предпочиителен arrayList

Для вставки в середину предпочтительнее ArrayList так как его метод поиска нативный и отработает быстрее при прочих равных

0
Автор поста оценил этот комментарий

ioc - это принцип, когда основное время программа проводит не в прикладном коде, а во фреймворке/сервере приложений. И они уже передают управление в прикладной код при наступлении неких событий (запрос снаружи/наступление момента времени и т.д.). Нужно для того, что бы снять с разработчика прикладного кода заботы по кодированию большого кол-ва системного кода. А так же для уменьшения связанности кусков кода между собой. То есть один обработчик события может и не подозревать о наличии другого куска кода. А при классической разработке надо было бы разработать код, который бы обрабатывал системный слой (time/http  и т.д.) и знал бы про все обработчики, и таким образом код был бы сильно связан.


di - это способ связывания компонентов системы между собой. В di мы просто декларируем, что тут вот и тут нам нужно то и то, но сами явно не ищем/создаем реализацию того, что нужно.


В подавляющем кол-ве случаев лучше ArrayList, но есть редкие кейсы, когда LinkedList будет лучше. В общем зависит от профиля нагрузки на список. Например если список очень большой и нам нужно проитерировать список и выкинуть из списка ненужные элементы, то LinkedList может выиграть в разы.

DELETED
Автор поста оценил этот комментарий

arraylist сам боженька написал, linkedlist - cатанинское отродье

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

Почему же?)

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества