(362) alex_sh2008, В яве всегда передается значение. Передачи по ссылки в яве не существует. Параметр так же "закрывает" любые внешние переменные с совпавшим именем. Садись два. :))))))
(376) awk, Это полное определение ссылки на объект, в C++ заменяется на & а в Java определяется по умолчанию, тоесть мы не пишем при определении параметров const Cat* Cat, а пишем Cat& Cat или Cat Cat в Java
(377) alex_sh2008, А про Java молчи, что бы не позорится...
1. Указатель в C++ <> ссылка в Java.
2. Указатель в C++ <> ссылка в С++.
Под ссылкой в С/С++ подразумевается не ограниченный указатель, а псевдоним. Под ссылкой в Яве подразумевается именованный адрес хранения значения (ограниченный указатель).
(340) DoctorRoza, записывай...
если тип задан с маленькой буквы (int a, float a), то по значению передается,
если с большой - по ссылке (String c, Integer d) :)
А то там...кучи, стеки :))) фиг поймешь эти объяснения :)))
может вот так тебе будет понятнее:
вот обычные типы -они же привычнее.
public boolean fight(int a,float b)
выше тоже самое, просто тип "Cat" (вместо int или float) у anotherCat.
После 1С просто непривычно что типы переменных могут быть названы как угодно,
а вообще в java принято что если пишут с большой буквы - то это название Класса(тип переменной),
а переменные все пишут с маленькой буквы,
константы пишут - полностью заглавными через нижнее подчеркивание , например : public static int CUSTOM_CONSTANT=5;
(329) minimajack, ой не занудствуй :) в терминал 1С вполне себе константа и без final :)
final запрещает модификацию переменной, НО в 1С Константы можно было всегда изменять :)
статические переменные принято начинать с "s" - например public static int sVar;
часто еще можно встретить у переменных префикс "m";
например private int mVar;
private Paint mPaint;
так обозначаются переменные доступные и используемые только внутри класса.
(462) spacecraft, хватит заниматься ерундой - изменять переданные в метод объекты нельзя, возможно только взаимодействовать с объектом.
Послушайте fzt закрывайте лавочку - смысла говорить о всякой хрени нет.
(460) spacecraft, Равносильно:
Integer x;
public NewClass(){
x = new Integer(1);
myMetod(x);
}
В принципе компилятор так и делает во время анализа кода, но может и так сделать:
Integer x;
public NewClass(){
myMetod(x);
x = new Integer(1);
}
Скомпилировать и де компилировать нет возможности.
(467) awk, в методе будет 2. И область видимости в данном случае это просто побочно. Можно было дать другое имя в методе. Результат от это не изменится.
На что хотел обратить внимание: Integer(1) это объект. Значит в метод передается не как примитив. Логично было бы ожидать, что значение поля класса тоже изменится. Однако этого не происходит.
(468) spacecraft,
public class NewClass {
Integer x;
public NewClass(){
myMetod(x);
}
public void myMetod(Integer x){
x++;
}
}
Немножко изменил класс, какой результат будет?
(482) alex_sh2008, а как объект хранится в памяти? И все не примитивы инициализируются по-умолчание null. Целы числа = 0, булевы = false, вещественные числа = 0.0
(490) spacecraft, В том же участке памяти, который выделятся для объекта класса, как правило это в общем поле памяти выделенного для приложения ("куче"), там же выделяется память для заголовка объекта(ссылки), при инициализации этого объекта, память уже может быть выделена в другой области общей памяти приложения.
(491) alex_sh2008, я правильно понимаю, что память под примитивы объекта выделяются при объявлении переменной класса. Т.е "Cat cat;" ?
Или что в таком случае инициализация?
(495) spacecraft, Сat cat - это не примитив, и вы его только задекларировали, а вот запись Сat cat = new Cat", уже заставляет выделять память под этот объект, и соответственно выделяя память под примитивы и ссылки полей объекта
(498) spacecraft, в конструкторе вы инициализируете поля не примитивы объекта, и для них тоже выделяется память, но не обязательно в этой же области памяти, а в любой свободной.
(501) alex_sh2008, пямять выделяется объекту. Если память фрагментирована, это не делает его не одним объектом. Файл на диске тоже может в разных участках памяти хранится.
(509) alex_sh2008, при создание объекта все поля сразу инициализируются. И ссылочные типы тоже. Ведь они свое значение (ссылку) так же в стеке объекта содержат.
(512) spacecraft, Выделяется память только для самой ссылки но не для объекта, если по простому то выделяется sizeof(ссылка) памяти, хотя в Java вроде и нет такой функции, забыл.
public class Cat {
public Cat(){
System.out.println("Cat");
}
}
public class NewClass {
Cat cat = new Cat();
public NewClass(){
System.out.println("NewClass");
}
}
public class Test {
public static void main(String[] args) {
NewClass newClass = new NewClass();
}
}
(477) awk, тут передача не как примитива по значению 1. А передача по значению ссылки на Integer(1). Кстати, вот тут и как раз hashCode и покажет.
И в метод попадет новая ссылка на тот же объект.
Но у объекта Integer нет сеттера. И при манипулировании с ним - будут создаваться новые объекты. Соответственно первоначальная ссылка будет ссылаться на первоначальный объект. А в методе будет ссылка уже на совсем другой объект.
Вот такой забавный факт.
Тема-то, смотрю, интерес вызвала. Ну у меня при чтении блоками по 20Мб парсинг и помещение в битовую маску занимает 4 секунды. Т.е. читайте "сортировка 100кк записей".
По поводу двоичных деревьев, то строительство дерева требует определенного количества вычислений. Для каждой новой вставки надо пройтись по ветке, пока не найдется промежуточное место, в которое элемент будет помещен. Минимальное количество проверок - 2, когда мы сравнили первый элемент с вставляемым, а потом второй и оказалось, что вставляемый элемент находится между ними. Дальше среднее количество сравнений очень медленно растет, т.к. количество просматриваемых узлов дерева равно от 2 до Log2(N). Для 1024 - это от 2 до 10 раз, в среднем 6. Для 1М - уже 11, для 100М - 16,5 где-то. Т.е. достаточно быстро.
Если сортировать неупорядоченный массив, то либо также вставкой в новый через построение бинарного дерева - примерно такая же эффективность. но сразу расходуется много памяти; либо перестановками, но в 16,5 сравнений на элемент уже не обойтись.
Самый скоростной механизм - хеш-функция, которая сразу вычисляет позицию элемента. У Макконнелла в книге Совершенный код приведен вариант табличной оптимизации, где для каждого возможного элемента выделяется последовательная ячейка в памяти. Тогда за счет избыточного выделения памяти достигается эффективность О(1) для вставки и нахождения элемента. При таком подходе можно использовать как раз признак да/нет для определения наличия элемента в таблице. А для этого достаточно одного бита.
По итогу на практике для данной задачи не вижу смысла жертвовать памятью добиваясь О(1), на фоне стоимости операций ввода-вывода. Могут быть, конечно, задачи, когда это критично. Но не эта.
По той же причине не вижу особого смысла в использовании тут B-Tree структур. Красно-черное дерево, можно сказать, является частным случаем B-tree (это 2-3 дерево, реализованное на бинарном дереве). B-Tree конечно даст выигрыш по скорости. Но опять-таки - за счет увеличения расхода памяти. Хотя в x64 java, наверное, 2-5 B-Tree будет столько же памяти жрать как и red-black (а то и 2-6), а работать быстрее. Но его еще реализовывать надо, а TreeSet уже из коробки :)
(614) B++ депевья быстрее двоичных за счет кэширования страниц верхнего уровня.
Что касается расхода памяти, то в среднеи заполнение порядка 75% а вот из-за того что каждая ветка КЧД содержит ссылки на соседние элементы, то В++ деревья занимают меньше памяти.
Бери мою реализацию на С#
(616) Посмотри статью. Там есть выкладки. Писалась она 14 лет назад.
Считай если в среднем на странице 75% и элементы страниц это ссылки то около 100кк/0.75
Занимают страницы на нижнем уровне. У меня получилось оптимальным на том компьютере размер 64 элемента на 1 уровне и 264 на верхних.
А скорость обхода немного медленнее чем обход массива. Так как в среднем на странице 64 элемента. Страницы между собой связаны ссылками. То потери скорости связаны с переходом со страницы на страницу
(615) Serginio, Да нет у меня никакой задачи супер-оптимизации. Просто в рамках изучения java побаловался. И если на то пошло, то "жадный" алгоритм (starik-2005) эффективнее в плане производительности, чем B-Tree. По структуре очень похоже на B-Tree - то же самое дерево, где каждый узел содержит порцию данных. Только принцип построения дерева не по отношению между элементами, а по структуре самого числа. За счет этого операции поиска и сравнения ВООБЩЕ не требуются. Но памяти жрет еще больше, и полный обход дерева дольше за счет избыточности. Но для не очень больших чисел имеет право на жизнь, если вдруг таки требуется супер-оптимизация по скорости в этом месте.
(618) И как это поможет на сравнение больше меньше?
На самом деле в БД например при объединении применяются 3 алгоритма, поиск в Hash таблице, в В+ и алгоритм слияния сортированных данных в тех. же В+ деревьях.
Вот пример на 1С
http://catalog.mista.ru/public/326983/
(620) Serginio, Сравнении чего на больше меньше? Зачем? Обуждалась конкретная реализация для решения конкретной узкой задачи. "Жадная" сортировка не использует сравнения. Только прямой доступ по конкретному адресу, как в хэш-таблицах.
Добрый день, как успехи с изучением? Что сложного было в освоении этого языка?
Добрый день.
В изучении собственно языка лично у меня трудностей нет. Я уже около 20 лет как фанат объектной парадигмы, поэтому вся концептуальная модель Java для меня как чистая река для рыбы :)
А основная трудность для меня лично - эти сотни и тысячи библиотечных классов и интерфейсов, которые глубоко прорастают друг в друга и переплетаются между собой, как корни дерева. Запомнить все невозможно, да и быстро стал забывать с возрастом, приходится подолгу копаться в хелпах, чтобы найти то, что нужно для конкретной задачи. А текст английский, хоть и адаптированный, все равно приходится напрягаться, чтобы правильно понять содержание. А гугл-переводчик иногда так наврет, что хоть на сайт анекдотов выкладывай :)
Неплохо также заняться вплотную UML, серьезные разработчики на нем общаются.
Ну, и как бонус, пришлось осваивать слепую 10-пальцевую печать на латинице. По-русски уже 30 лет вслепую печатаю, а на латинице пока сильно торможу. Дополнительно напрягает. Конечно, многие и без слепой печати обходятся.
По-русски уже 30 лет вслепую печатаю, а на латинице пока сильно торможу
Латиницу освоить после 30 лет русской раскладки вообще не проблема. Я латиницу осваивал после лет 15 русской раскладки, без проблем за пару недель приноровился.
Лучше курс пройти "Соло на клавиатуре" на латинице, там упражнения специально подобраны. Первое время очень часто путал местами буквы th, вместо the печатал hte. И тд.
Да вот как раз не очень. Постоянно будешь запинаться об сочетания вроде th и тд. Ещё какие то есть пара сочетаний в которых так же машинально не правильно ставишь порядок букв.
(645) Пока автоматизм не наработан, "машинально" лучше не писать, а мысленно следить за пальцами. Это можно сравнить, скажем, с изучением языков: знаешь английский, а немецкий только изучаешь - если машинально говорить, обязательно будешь говорить где-нибудь английское слово вместо немецкого или на английский лад слова произносить. Следить приходится, чтобы не облажаться.
(1)Я си шарп учу, с универа имею апаратные знания и схемотехнику а шарп ближе к С++ потом с шарпа на плюсы раз плюнуть перейти если-что;
а так тебе идея - делай приложение которое само будет писать код 1С - БСП подключаемая обработка чтобы не искать а зашел в приложение и тебе в текстовый документ сразу напишет код
вот тут к примеру регулярные выражения, пишешь в строку - оно пишет что то значит и можно подбирать https://regexr.com/
Введение в Java. Курс посвящен изучению основ Java — популярного объектно-ориентированного языка программирования, разработанного компанией Sun Microsystems. JDK 8, синтаксис, объектно-ориентированное программирование, паттерны.
https://ru.hexlet.io/courses/java_101
Я с перспективой заработка думал, сейчас Java в тренде, особенно под Андроид, но сама тема разработки под Андроид меня что то не очень зацепила.
Ну как запасной вариант, в случае финансовой нестабильности в нашей стране. А так конечно в мечтах кодить в теплых странах и работать на западных дядь удаленно с привязкой к доллару.
(13) Семёныч, И сейчас ничего не мешает кодить в любой стране, а кодить на иностранного дядю за доллары, чревато последствиями, мне знакомы случаи когда попросту кидали программистов на весьма большие суммы.
(145) AlexO,
почему нет-то ? :) Разработка под Андроид хорошо развивается.
При определенном подходе, сейчас даже все еще можно самому зарабатывать на google play.
Правда уже сложнее чем пару лет назад, но возможности все равно остаются.
А уж сколько мечтающих сделать мобильное приложение для своего интернетмагазина :)
Знакомые вебщики постоянно обращаются.
Вот сейчас вообще можно даже не искать клиентов для Android, просто заключить партнерство с парой веб студий и они завалят заказами на разработку мобильных приложений.
почему нет-то ? :) Разработка под Андроид хорошо развивается.
Везде, может, и развивается, а экономическая ситуация в России от Андроида не зависит никак. Не будет денег - не будет заказов - не будет никакого "Ява для Андроида".
(164) Ibrogim, Надо для себя ставить цель, если писать для Андроид то и изучать именно это направление, так как писать программы для Андроид и SAP или Oracle, совершенно разные вещи и используются разные технологические решения и возможности языка.
Краснодар? Только там так разговаривают.
И однозначно "нет" - Владимир, Ярославль, Нижний Новгород, Тверь, Ростов, Воронеж, Казань, Мурманск, Ульяновск, и еще тысячи городов
а у меня но 1С большинство клиентов не из моего города,
А откуда ты? - из Москвы...
"а у меня все на удаленке" - "а откуда ты?" - "Из Питера".
"а я полностью удаленно" - "а откуда ты?" - "из Новосибирска"
"я набрал клиентов удаленно, и давно не фикси" - "откуда?" - "Екатеринбург".
Я не забыл никаких городов?
(155) AlexO,
Ну не знаю как у вас там, а у меня основная прибыль за разработку на Android идет из Японии :)
так что меня больше страшит замедление темпов экономики в Японии :)
В этом и прикол языков отличных от 1С, что их локализация не ограничена СНГ :)
В конце концов если нечего будет жрать в России - пойдешь демпинговать индусов на фриланс биржах, на суп заработаешь в любом случае.