Thinking in Java, 4th Edition (полная версия)
	Всем добрый день,
	Задался вопросом: есть ли где-то эта книга на русском языке и в полном обьеме?
	Потому что из моих сравнений оригинальной и русской версии — последняя не полная и даже попадаются ошибки. Спасибо!
P.S. знаю что лучше читать на английском, но все же:)
Именно. Для технических книг редко существует стопиццот разных переводов.
Нет ее в полном объёме на русском, т.е. как перевел «Питер» с потерями, так и есть. Читай оригинал
то не «потери», а просто перевод первой редакции. 4е издание выходило в нескольких редакциях, первая — как-раз то, где на ~400 стр меньше чем в
	3-ей...  в общем, ту самую 3ю редакцию и на нэйтиве найти очень сложно. Первое издание вот этим дополнить можете «Annotated Solution Guide for Thinking in Java» это просто решебник так сказать
	А вообще, по актуальной жабе вот эти рулят:
	1. Core Java
	— www.amazon.com/...s/dp/0137081898
	— www.amazon.com/...s/dp/013708160X
	2. Java The Complete Reference 9/E
https://habr.com/en/post/212707/ И по ссылке разбор ошибок в переводе этой книги.
	Советуют так : Для начала прочитайте бессмертную книгу "Thinking in Java".
	Потом сходите на собеседования в пару компаний, там все и узнаете. Честно предупреждайте, что хотите работать Java junior, Вам все должны будут рассказать. Просто прочитать и сходить. Не верю в это.
Но я начну с консоли линукса.
Код выглядит так :
	//Листинг 2.1. Программа array.java
	// array.java
	// Работа с массивами Java
	// Запуск программы: C>java arrayApp
	////////////////////////////////////////////////////////////////
	class ArrayApp
	{
	public static void main(String[] args)
	{
	long[] arr;
	// Ссылка на массив
	Листинг 2.1 (продолжение)
	arr = new long[100];
	// Создание массива
	int nElems = 0;
	// Количество элементов
	int j;
	// Счетчик цикла
	long searchKey;
	// Ключи искомого элемента
	//--------------------------------------------------------------
	arr[0] = 77;
	// Вставка 10 элементов
	arr[1] = 99;
	arr[2] = 44;
	arr[3] = 55;
	arr[4] = 22;
	arr[5] = 88;
	arr[6] = 11;
	arr[7] = 00;
	arr[8] = 66;
	arr[9] = 33;
	nElems = 10;
	// Массив содержит 10 элементов
	//--------------------------------------------------------------
	for(j=0; j<nElems; j++)
	// Вывод элементов
	System.out.print(arr[j] + " ");
	System.out.println("");
	//--------------------------------------------------------------
	searchKey = 66;
	// Поиск элемента с ключом 66
	for(j=0; j<nElems; j++)
	// Для каждого элемента
	if(arr[j] == searchKey)
	// Значение найдено?
	break;
	// Да - выход из цикла
	if(j == nElems)
	// Достигнут последний элемент?
	System.out.println("Can't find " + searchKey); // Да Пн 18 мар 2019 16:03:27
	else
	System.out.println("Found " + searchKey);
	// Нет
	//--------------------------------------------------------------
	searchKey = 55;
	// Удаление элемента с ключом 55
	for(j=0; j<nElems; j++)
	// Поиск удаляемого элемента
	if(arr[j] == searchKey)
	break;
	for(int k=j; k<nElems-1; k++)
	// Сдвиг последующих элементов
	arr[k] = arr[k+1];
	nElems--;
	// Уменьшение размера
	//--------------------------------------------------------------
	for(j=0; j<nElems; j++)
	// Вывод элементов
	System.out.print( arr[j] + " ");
	System.out.println("");
	}
	}
	// Конец класса ArrayApp
	/*Программа создает массив с именем arr , помещает в него 10 элементов данных
	(номера игроков), ищет элемент с ключом 66, выводит все элементы, удаляет игро-
	ка с ключом 55 и выводит оставшиеся 9 элементов. Результат работы программы
	выглядит так:Поддержка массивов в Java  
	55
	77 99 44 55 22 88 11 0 66 33
	Found 66
	77 99 44 22 88 11 0 66 33 */
У меня в блокноте всё красиво раскрашено. ( настройки его несложные ).
Кстати ошибок нет. Мною проверено сегодня Пн 18 мар 2019 18:35:49 И календарь даже раскрашен. И зачем ?
Проверяем что установлено на моём компьютере
	$ java -version
	java version "1.8.0_201"
	Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
	Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
	alex@alex:~/Emacsjava/Reese/chapter2_1/bin$
Всё.
Так как есть ещё время и силы рассмотрю дальше проект уже с 4 файлами, тоже массив.
Предыдущий был в процедурном стиле, а следующий в объектно-ориентированном. В чем разница ?
Холивары на эту тему ведутся всё время.
http://artanovy.com/2011/03/procedurnoe-protiv-obyektno-orientirovannogo/
Процедурное против объектно-ориентированного?
https://www.internet-technologies.ru/articles/chetyre-principa-obektno-orientirovannogo-programmirovaniya-v-java.html
Эта статья станет шпаргалкой по четырем основам ООП (инкапсуляции, наследованию, полиморфизму и абстракции).
Но это не религия, немало программистов работают с классами не ведая об этих четырех классах ни ухом, ни рылом.
Да, а вот здесь уже 7 основ. http://codengineering.ru/post/21 Кто-то называет это прозрением.
А кто-то вставляет палки в колёса.
			ArrayList figures = new ArrayList(); - правильно будет в данном случае List<point> figures = new ArrayList<>();
			ArrayList - Это специальная структура данных в java, позволяющая хранить объекты определенного типа в массиве. - неверное утверждение. Правильно будет в данном случае: ArrayList - это одна из реализаций интерфейса List(список) за основу которой берётся обычный массив.
			/**
			* Пустой конструктор
			*/
			Point() {}
			Пустой конструктор будет создан по умолчанию, не нужно им захламлять код.
P.S. Почему-то имя класса Point приводится к нижнем регистру автоматом в комментарии.
Кстати https://hyyudu.livejournal.com/225543.html Объектно-ориентированное программирование (ООП) - одна из парадигм, моделей написания программ. Их вообще есть еще несколько - функциональное, логическое, императивное ака процедурное и т.д. Если захотите - в Випипедии найдете. Наш же рассказ пойдет в особенности про хоббитов. Точнее, про объекты.
Добавлю, что на эту тему написано много. Возможно, что в ООП проще вносить изменения при необходимости.
Вт 19 мар 2019 17:40:12
			//Листинг 2.5. Программа classDataArray.java
			// classDataArray.java
			// Объекты как элементы данных
			// Запуск программы: C> java ClassDataApp
			////////////////////////////////////////////////////////////////
			class Person
			{
			private String lastName;
			private String firstName;
			private int age;
			//--------------------------------------------------------------
			public Person(String last, String first, int a)
			{
			// Конструктор
			lastName = last;
			firstName = first;
			age = a;
			}
			//--------------------------------------------------------------
			public void displayPerson()
			{
			System.out.print("Last name:" + lastName);
			System.out.print(", First name: " + firstName);
			System.out.println(", Age: " + age);
			}
			//--------------------------------------------------------------
			public String getLast()
			// Получение фамилии
			{ return lastName; }
			} // Конец класса PersonХранение объектов  
			// page 77
			////////////////////////////////////////////////////////////////
			class ClassDataArray
			{
			private Person[] a;
			// Ссылка на массив
			private int nElems;
			// Количество элементов данных
			public ClassDataArray(int max)
			// Конструктор
			{
			a = new Person[max];
			// Создание массива
			nElems = 0;
			// Пока нет ни одного элемента
			}
			//--------------------------------------------------------------
			public Person find(String searchName)
			{
			// Поиск заданного значения
			int j;
			for(j=0; j<nElems; j++)
			// Для каждого элемента
			if( a[j].getLast().equals(searchName) ) // Значение найдено?
			break;
			// Выход из цикла
			if(j == nElems)
			// Достигнут последний элемент?
			return null;
			// Да, значение не найдено
			else
			return a[j];
			// Нет, значение найдено
			} // end find()
			//-------------------------------------------------------------
			// Включение записи в массив
			public void insert(String last, String first, int age)
			{
			a[nElems] = new Person(last, first, age);
			nElems++;
			// Увеличение размера
			}
			//--------------------------------------------------------------
			public boolean delete(String searchName)
			{
			// Удаление из массива
			int j;
			for(j=0; j<nElems; j++)
			// Поиск удаляемого элемента
			if( a[j].getLast().equals(searchName) )
			break;
			if(j==nElems)
			// Найти не удалось
			return false;
			else
			// Значение найдено
			{
			for(int k=j; k<nElems; k++)
			// Сдвиг последующих элементов
			a[k] = a[k+1];
			nElems--;
			// Уменьшение размера
			return true;
			}
			}
			//продолжение 78   Глава 2. Массивы
			//Листинг 2.5 (продолжение)
			//--------------------------------------------------------------
			public void displayA()
			// Вывод содержимого массива
			{
			for(int j=0; j<nElems; j++)
			// Для каждого элемента
			a[j].displayPerson();
			// Вывод
			}
			//--------------------------------------------------------------
			} // Конец класса ClassDataArray
			////////////////////////////////////////////////////////////////
			class ClassDataApp
			{
			public static void main(String[] args)
			{
			int maxSize = 100;
			// Размер массива
			ClassDataArray arr;
			// Ссылка на массив
			arr = new ClassDataArray(maxSize); // Создание массива
			// Вставка 10 элементов
			arr.insert("Evans", "Patty", 24);
			arr.insert("Smith", "Lorraine", 37);
			arr.insert("Yee", "Tom", 43);
			arr.insert("Adams", "Henry", 63);
			arr.insert("Hashimoto", "Sato", 21);
			arr.insert("Stimson", "Henry", 29);
			arr.insert("Velasquez", "Jose", 72);
			arr.insert("Lamarque", "Henry", 54);
			arr.insert("Vang", "Minh", 22);
			arr.insert("Creswell", "Lucinda", 18);
			arr.displayA();
			// Вывод содержимого
			String searchKey = "Stimson"; // Поиск элемента
			Person found;
			found=arr.find(searchKey);
			if (found != null)
			{
			System.out.print("Found ");
			found.displayPerson();
			}
			else
			System.out.println("Can't find " + searchKey);
			System.out.println("Deleting Smith, Yee, and Creswell");
			arr.delete("Smith");
			// Удаление трех элементов
			arr.delete("Yee");
			arr.delete("Creswell");
			arr.displayA();
			// Повторный вывод содержимого
			}
			} // Конец класса ClassDataApp
			////////////////////////////////////////////////////////////////
			/*page 79 Класс Person Lafore 2013
			Результат выполнения программы:
			Last name: Evans, First name: Patty, Age: 24
			Last name: Smith, First name: Lorraine, Age: 37
			Last name: Yee, First name: Tom, Age: 43
			Last name: Adams, First name: Henry, Age: 63
			Last name: Hashimoto, First name: Sato, Age: 21
			Last name: Stimson, First name: Henry, Age: 29
			Last name: Velasquez, First name: Jose, Age: 72
			Last name: Lamarque, First name: Henry, Age: 54
			Last name: Vang, First name: Minh, Age: 22
			Last name: Creswell, First name: Lucinda, Age: 18
			Found
			Last name: Stimson, First name: Henry, Age: 29
			Deleting Smith, Yee, and Creswell
			Last name: Evans, First name: Patty, Age: 24
			Last name: Adams, First name: Henry, Age: 63
			Last name: Hashimoto, First name: Sato, Age: 21
			Last name: Stimson, First name: Henry, Age: 29
			Last name: Velasquez, First name: Jose, Age: 72
			Last name: Lamarque, First name: Henry, Age: 54
			Last name: Vang, First name: Minh, Age: 22
			Программа classDataArray.java наглядно показывает, что структуры данных
			могут использоваться не только для хранения примитивных типов, но и объектов
			классов. (Обратите внимание: реальная программа, использующая фамилию в ка-
			честве ключа, должна принять во внимание возможность дублирования фамилий —
			как упоминалось ранее, это несколько усложнит программирование.)
			O-синтаксис
			В США автомобили делятся в зависимости от размера на несколько категорий:
			субкомпакты, компакты, среднеразмерные и т. д. Эти категории позволяют по-
			лучить общее представление о габаритах автомобиля без указания конкретных
			размеров. Подобная система приблизительных обозначений существует и для
			описания эффективности компьютерных алгоритмов. В информатике она назы-
			вается «O-синтаксисом».
			На первый взгляд может показаться, что сравнение алгоритмов должно бази-
			роваться на оценках вида «Алгоритм А работает вдвое быстрее алгоритма Б», но
			в действительности такие утверждения не имеют особого смысла. Почему? Потому
			что пропорции могут кардинально изменяться при изменении количества элемен-
			тов. Допустим, при увеличении количества элементов на 50% алгоритм А начинает
			работать втрое быстрее алгоритма Б, а при половинном количестве элементов
			алгоритмы А и Б сравниваются по скорости. Критерий сравнения (сложность ал
			горитма) должен связывать скорость алгоритма с количеством элементов. Давайте
			проанализируем эту связь для алгоритмов, рассмотренных ранее.
			Специальный выпуск для Лены.
			O-синтаксис  Page 83
			*/
		Какой вывод, не углубляясь в объяснение на примерах ( Дом, Машина, Животные и т. д. )эти примеры не помогают. А вот здесь видно что, для начала при сравнении двух файлов. Из них первый без классов, а
второй с классами. Во второй программе мы видим слова классы ( classes ), а в первой нет.
В этой папке даем команду : $ javac classDataArray.java
В той папке где лежит один java файл, classDataArray.java появятся ClassDataApp.class , ClassDataApp.class,
Person.class ( то есть три файла с расширением .class ) Readmy я создаю сам для комментария. В этой же папке
выполняем программу с помощью $ java ClassDataApp
и видим результат :
			alex@alex:~/Emacsjava/Reese/Listing_2_5$ java ClassDataApp
			Last name:Evans, First name: Patty, Age: 24
			Last name:Smith, First name: Lorraine, Age: 37
			Last name:Yee, First name: Tom, Age: 43
			Last name:Adams, First name: Henry, Age: 63
			Last name:Hashimoto, First name: Sato, Age: 21
			Last name:Stimson, First name: Henry, Age: 29
			Last name:Velasquez, First name: Jose, Age: 72
			Last name:Lamarque, First name: Henry, Age: 54
			Last name:Vang, First name: Minh, Age: 22
			Last name:Creswell, First name: Lucinda, Age: 18
			Found Last name:Stimson, First name: Henry, Age: 29
			Deleting Smith, Yee, and Creswell
			Last name:Evans, First name: Patty, Age: 24
			Last name:Adams, First name: Henry, Age: 63
			Last name:Hashimoto, First name: Sato, Age: 21
			Last name:Stimson, First name: Henry, Age: 29
			Last name:Velasquez, First name: Jose, Age: 72
			Last name:Lamarque, First name: Henry, Age: 54
			Last name:Vang, First name: Minh, Age: 22
			alex@alex:~/Emacsjava/Reese/Listing_2_5$
Результат отличается от результата в первой программе. Неплохо, но не это главное.
При необходимости можно в пределах класса менять что-то. Проще, чем в первом файле.
И ещё одна сегодня, тоже с одним файлом и несколькими классами
Только что выполнилась.
	//554   Глава 12. Пирамиды
	/*Размер массива
	Размер массива (количество узлов в пирамиде) — важнейший атрибут состояния
	пирамиды и необходимое поле класса Heap . Узлы, скопированные из последней
	ячейки, не стираются, поэтому алгоритм может определить положение последней
	занятой ячейки только по текущему размеру массива.
	Программа heap.java
	В программе heap.java (листинг 12.1) используется класс Node . Единственным по-
	лем этого класса является переменная iData , в которой хранится ключ узла. Есте-
	ственно, в реальной программе этот класс содержал бы много других полей. Класс
	Heap содержит методы, упомянутые выше, а также методы isEmpty() и displayHeap() .
	Последний метод выводит примитивное, но наглядное символьное представление
	содержимого пирамиды.
	Листинг 12.1. Программа heap.java
	*/
	// heap.java
	// Работа с пирамидой
	// Запуск программы: C>java HeapApp
	import java.io.*;
	////////////////////////////////////////////////////////////////
	class Node
	{
	private int iData;
	// Данные (ключ)
	// -------------------------------------------------------------
	public Node(int key)
	// Конструктор
	{ iData = key; }
	// -------------------------------------------------------------
	public int getKey()
	{ return iData; }
	// -------------------------------------------------------------
	public void setKey(int id)
	{ iData = id; }
	// -------------------------------------------------------------
	} // Конец класса Node
	////////////////////////////////////////////////////////////////
	class Heap
	{
	private Node[] heapArray;
	private int maxSize;
	// Размер массива
	private int currentSize;
	// Количество узлов в массиве
	// -------------------------------------------------------------
	public Heap(int mx)
	
	    // Конструктор
	
	{
	
	    maxSize = mx;
	
	currentSize = 0;
	
	// Реализация пирамиды на языке Java  
	//
	//
	//
	//
	//
	//   page 555
	heapArray = new Node[maxSize];
	// Создание массива
	}
	// -------------------------------------------------------------
	public boolean isEmpty()
	{ return currentSize==0; }
	// -------------------------------------------------------------
	public boolean insert(int key)
	{
	if(currentSize==maxSize)
	return false;
	Node newNode = new Node(key);
	heapArray[currentSize] = newNode;
	trickleUp(currentSize++);
	return true;
	}
	// -------------------------------------------------------------
	public void trickleUp(int index)
	{
	int parent = (index-1) / 2;
	Node bottom = heapArray[index];
	while( index > 0 &&
	heapArray[parent].getKey() < bottom.getKey() )
	{
	heapArray[index] = heapArray[parent]; // Узел смещается вниз
	index = parent;
	parent = (parent-1) / 2;
	}
	heapArray[index] = bottom;
	}
	// -------------------------------------------------------------
	public Node remove()
	// Удаление элемента с наибольшим ключом
	{
	// (Предполагается, что список не пуст)
	Node root = heapArray[0];
	heapArray[0] = heapArray[--currentSize];
	trickleDown(0);
	return root;
	}
	//-------------------------------------------------------------
	public void trickleDown(int index)
	{
	int largerChild;
	Node top = heapArray[index];
	// Сохранение корня
	while(index < currentSize/2)
	// Пока у узла имеется
	{
	// хотя бы один потомок
	int leftChild = 2*index+1;
	int rightChild = leftChild+1;
	// Определение большего потомка
	if(rightChild < currentSize && // (Правый потомок существует?)
	heapArray[leftChild].getKey() <
	// продолжение 556   Глава 12. Пирамиды
	// Листинг 12.1 (продолжение)
	heapArray[rightChild].getKey())
	largerChild = rightChild;
	else
	largerChild = leftChild;
	// top >= largerChild?
	if( top.getKey() >= heapArray[largerChild].getKey() )
	break;
	// Потомок сдвигается вверх
	heapArray[index] = heapArray[largerChild];
	index = largerChild;
	// Переход вниз
	}
	heapArray[index] = top;
	// index <- корень
	}
	// -------------------------------------------------------------
	public boolean change(int index, int newValue)
	{
	if(index<0 || index>=currentSize)
	return false;
	int oldValue = heapArray[index].getKey(); // Сохранение старого ключа
	heapArray[index].setKey(newValue); // Присваивание нового ключа
	if(oldValue < newValue)
	// Если узел повышается,
	trickleUp(index);
	// выполняется смещение вверх.
	else
	// Если узел понижается,
	trickleDown(index);
	// выполняется смещение вниз.
	return true;
	}
	// -------------------------------------------------------------
	public void displayHeap()
	{
	System.out.print("heapArray: ");
	// Формат массива
	for(int m=0; m<currentSize; m++)
	if(heapArray[m] != null)
	System.out.print( heapArray[m].getKey() + " ");
	else
	System.out.print( "-- ");
	System.out.println();
	// Формат пирамиды
	int nBlanks = 32;
	int itemsPerRow = 1;
	int column = 0;
	int j = 0;
	// Текущий элемент
	String dots = "...............................";
	System.out.println(dots+dots);
	// Верхний пунктир
	while(currentSize > 0)
	{
	if(column == 0)
	for(int k=0; k<nBlanks; k++)
	// Для каждого элемента пирамиды
	// Первый элемент в строке?
	// Предшествующие пробелыРеализация пирамиды на языке Java  
	// 557
	System.out.print("");
	// Вывод элемента
	System.out.print(heapArray[j].getKey());if(++j == currentSize)
	// Вывод завершен?
	break;
	if(++column==itemsPerRow)
	// Конец строки?
	{
	nBlanks /= 2;
	// Половина пробелов
	itemsPerRow *= 2;
	// Вдвое больше элементов
	column = 0;
	// Начать заново
	System.out.println();
	// Переход на новую строку
	}
	else
	// Следующий элемент в строке
	for(int k=0; k<nBlanks*2-2; k++)
	
	//System.out.print(‘ ‘);
	//Здесь ошибка, я просто переписал строку в консоли (видно, что ' ' разные)
	System.out.print(' ');
	// Внутренние пробелы
	}
	System.out.println("\n"+dots+dots);
	 // Нижний пунктир
	}
	// -------------------------------------------------------------
	}
	// Конец класса Heap
	////////////////////////////////////////////////////////////////
	class HeapApp
	{
	public static void main(String[] args) throws IOException
	{
	int value, value2;
	Heap theHeap = new Heap(31); // Создание пирамиды с максимальным
	boolean success;
	// размером 31
	theHeap.insert(70);
	theHeap.insert(40);
	theHeap.insert(50);
	theHeap.insert(20);
	theHeap.insert(60);
	theHeap.insert(100);
	theHeap.insert(80);
	theHeap.insert(30);
	theHeap.insert(10);
	theHeap.insert(90);
	// Вставка 10 items
	while(true)
	// Пока пользователь не нажмет Ctrl+C
	{
	System.out.print("Enter first letter of ");
	System.out.print("show, insert, remove, change: ");
	int choice = getChar();
	switch(choice)
	{
	case 's':
	// Вывод
	// продолжение 558   Глава 12. Пирамиды
	// Листинг 12.1 (продолжение)
	theHeap.displayHeap();
	break;
	case 'i':
	// Вставка
	System.out.print("Enter value to insert: ");
	value = getInt();
	success = theHeap.insert(value);
	if( !success )
	System.out.println("Can’t insert; heap full");
	break;
	case 'r':
	// Удаление
	if( !theHeap.isEmpty() )
	theHeap.remove();
	else
	System.out.println("Can’t remove; heap empty");
	break;
	case 'c':
	// Изменение приоритета
	System.out.print("Enter current index of item: ");
	value = getInt();
	System.out.print("Enter new key: ");
	value2 = getInt();
	success = theHeap.change(value, value2);
	if( !success )
	System.out.println("Invalid index");
	break;
	default:
	System.out.println("Invalid entry\n");
	}
	}
	}
	//-------------------------------------------------------------
	public static String getString() throws IOException
	{
	InputStreamReader isr = new InputStreamReader(System.in);
	BufferedReader br = new BufferedReader(isr);
	String s = br.readLine();
	return s;
	}
	//-------------------------------------------------------------
	public static char getChar() throws IOException
	{
	String s = getString();
	return s.charAt(0);
	}
	//-------------------------------------------------------------
	public static int getInt() throws IOException
	{
	String s = getString();
	return Integer.parseInt(s);
	// Реализация пирамиды на языке Java  
	// page 559
	}
	 //-------------------------------------------------------------
	}
	// Конец класса HeapApp
	////////////////////////////////////////////////////////////////
	/*
	В массиве корень пирамиды размещается в ячейке с индексом 0. Некоторые
	реализации пирамиды размещают корень в ячейке 1, а ячейка 0 используется в ка-
	честве «сторожа» с наибольшим возможным ключом. Такое решение немного уско-
	ряет некоторые алгоритмы, но усложняет реализацию на концептуальном уровне.
	Метод main() приложения HeapApp
	создает пирамиду с максимальным  размером 31 (обусловленным ограничениями метода вывода) и вставляет в нее 10 узлов со
	случайными ключами. Затем программа входит в цикл, в котором пользователь вводит команды s, i, r или c (соответственно вывод, вставка, удаление или изменение).
	Пример взаимодействия с программой:
	Enter first letter of show, insert, remove, change: s
	heapArray: 100 90 80 30 60 50 70 20 10 40
	..............................................................
	100
	90
	80
	30
	60
	50
	70
	20
	10
	40
	..............................................................
	Enter first letter of show, insert, remove, change: i
	Enter value to insert: 53
	Enter first letter of show, insert, remove, change: s
	heapArray: 100 90 80 30 60 50 70 20 10 40 53
	..............................................................
	100
	90
	80
	30
	60
	50
	70
	20
	10
	40
	53
	..............................................................
	Enter first letter of show, insert, remove, change: r
	Enter first letter of show, insert, remove, change: s
	heapArray: 90 60 80 30 53 50 70 20 10 40
	..............................................................
	90
	60
	80
	30
	53
	50
	70
	20
	10
	40
	..............................................................
	Enter first letter of show, insert, remove, change:
	Пользователь выводит состояние пирамиды, добавляет элемент с ключом 53,
	снова выводит, удаляет элемент с наибольшим ключом и выводит состояние
	пирамиды в третий раз. Метод show() выводит оба представления пирамиды: как
	в виде массива, так и в виде дерева. Сила воо
	*/
// Выполнены те же команды, что и в предыдушей программе. Вт 19 мар 2019 20:46:21
Ср 20 мар 2019 22:15:38
Я здесь. Алгоритмы почти никому не нужны.
	https://javarush.ru/groups/posts/1997-algoritmih-sortirovki-v-teorii-i-na-praktike
	    10 октября 2018 12:45
	    4249просмотров
	    4комментария
	
	Алгоритмы сортировки в теории и на практике
	Пост из группы Random далее отсюда ссылка на хабр ( часть 2 ).
	
	https://habr.com/en/post/195482/
	Введение в анализ сложности алгоритмов (часть 2)
	https://habr.com/en/post/196560/
	 AveNat
	October 7, 2013 at 02:12 PM
	Введение в анализ сложности алгоритмов (часть 1)
	http://discrete.gr/complexity/
	Многие современные программисты, пишущие классные и широко распространённые программы, имеют крайне смутное представление о теоретической информатике. Это не мешает им оставаться прекрасными творческими специалистами, и мы благодарны за то, что они создают.
	
	Тем не менее, знание теории тоже имеет свои преимущества и может оказаться весьма полезным. В этой статье, предназначенной для программистов, которые являются хорошими практиками, но имеют слабое представление о теории, я представлю один из наиболее прагматичных программистских инструментов: нотацию «большое О» и анализ сложности алгоритмов. Как человек, который работал как в области академической науки, так и над созданием коммерческого ПО, я считаю эти инструменты по-настоящему полезными на практике. Надеюсь, что после прочтения этой статьи вы сможете применить их к собственному коду, чтобы сделать его ещё лучше. Также этот пост принесёт с собой понимание таких общих терминов, используемых теоретиками информатики, как «большое О», «асимптотическое поведение», «анализ наиболее неблагоприятного случая» и т.п.
	
	https://pandia.ru/text/78/339/550.php
	Разработка алгоритмов простейших программ
	
	https://habr.com/en/post/260713/
	Это не столько IT, сколько R&D. Преобразование Фурье, с которого и начался функциональный анализ, широко используется во многих областях исследований. Например, спектральный анализ временных рядов. Это один из статистических методов анализа данных. Статистические методы — один из инструментов СППР.
	Возможно, коллеги, работающие в этом направлении, приведут более детальные примеры.
	Да, это мало кому действительно нужно на практике, но если у вас всё получается с этими предметами — вы понимаете, что хотите развиваться в R&D. Ср 20 мар 2019 22:15:38
	Единицам, которые пишут нечто эпическое. Практики обходятся без знаний их.
	 
22 марта 2018 Четверг
https://javatalks.ru/topics/20640
Проверено, у меня работает ( три файла ява и один readmy )
	Давайте попробуем разобраться на этом примере: http://www.javatalks.ru/ftopic9059.php ?
	вот я создал каталог PROBA, создал там три файла(Ball.java, BallComponent.java, BounceThread.java), в которые скопировал примеры кодов. Что мне дальше выполнять? Спрашивает человек.
1. создаем три исходника: Ball.java, BallComponent.java и BounceThread.java. положим их в какую-нибудь отдельную папку, например java
2. заходим в эту папку из командной строки (делаем ее текущей)
- 
			cd java
- 
			mkdir classes
- 
			javac -d ./classes *.java 
- 
			cd classes
- 
			java -cp . BounceThread 
опция -cp (classpath) говорит интерпретатору, где искать классы, требующиеся при выполнении метода main. classpath это также переменная окружения, можно задать в настройках командного интерпретатора, или командой CLASSPATH="$CLASSPATH:(your_path_to_classes)".. это в *nix, как в винде не помню. наслаждаемся летающими шариками!
Программируйте пока есть желание
// Ball.java
	     import java.awt.geom.*;
	          
	         /**
	      *      * A ball that moves and bounces off the edges of a
	      *           * rectangle
	      *                * @version 1.33 2007-05-17
	      *                     * @author Cay Horstmann
	      *                         */
	         public class Ball
	         {
	                    /**
	                 *           Moves the ball to the next position, reversing direction
	                 *                     if it hits one of the edges
	                 *                            */
	                 public void move(Rectangle2D bounds)
	                        {
	                                  x += dx;
	                                        y += dy;
	                                              if (x < bounds.getMinX())
	                                                        {
	                                                                 x = 2*bounds.getMinX() - x;
	                                                                          dx = -dx;
	                                                                            }
	                                                    if (x + XSIZE >= bounds.getMaxX())
	                                                          {
	                                                                       x = 2*(bounds.getMaxX() - XSIZE) - x;
	                                                                                dx = -dx;
	                                                                                  }
	                                                      if (y < bounds.getMinY())
	                                                                {
	                                                                             y = 2*bounds.getMinY() - y;
	                                                                                  dy = -dy;
	                                                                                        }
	                                                            if (y + YSIZE >= bounds.getMaxY())
	                                                                      {
	                                                                                   y = 2*(bounds.getMaxY() - YSIZE) - y;
	                                                                                        dy = -dy;
	                                                                                          }
	                                                               }
	                  
	                  
	                    /**
	                 *           Gets the shape of the ball at its current position.
	                 *                  */
	                    public Ellipse2D getShape()
	                           {
	                                         return new Ellipse2D.Double(x, y, XSIZE, YSIZE);
	                                        }
	                     
	                       private static final int XSIZE = 15;
	                              private static final int YSIZE = 15;
	                                 private double x = 0;
	                                    private double y = 0;
	                                       private double dx = 1;
	                                          private double dy = 1;
	                                          }
---
// BallComponent.java
	    import java.awt.*;
	        import java.util.*;
	        import javax.swing.*;
	             
	            /**
	         *      * The component that draws the balls.
	         *           * @version 1.33 2007-05-17
	         *                * @author Cay Horstmann
	         *                     */
	            public class BallComponent extends JComponent
	            {
	                       /**
	                    *         * Add a ball to the panel.
	                    *                 * @param b the ball to add
	                    *                         */
	                       public void add(Ball b)
	                              {
	                                        balls.add(b);
	                                           }
	                        
	                          public void paintComponent(Graphics g)
	                                 {
	                                           Graphics2D g2 = (Graphics2D) g;
	                                                 for (Ball b : balls)
	                                                           {
	                                                                        g2.fill(b.getShape());
	                                                                          }
	                                                    }
	                           
	                             private ArrayList<Ball> balls = new ArrayList<Ball>();
	                             }
---
// BounceThread.java
	    import java.awt.*;
	        import java.awt.event.*;
	        import javax.swing.*;
	             
	            /**
	         *      * Shows animated bouncing balls.
	         *           * @version 1.33 2007-05-17
	         *                * @author Cay Horstmann
	         *                     */
	            public class BounceThread
	            {
	                       public static void main(String[] args)
	                              {
	                                   
	                                                 JFrame frame = new BounceFrame();
	                                                            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	                                                                   frame.setVisible(true);
	                                                                  }
	                       }
	     
	    /**
	     *      * A runnable that animates a bouncing ball.
	     *           */
	    class BallRunnable implements Runnable
	        {
	               /**
	            *         * Constructs the runnable.
	            *                 * @aBall the ball to bounce
	            *                         * @aComponent the component in which the ball bounces
	            *                                 */
	               public BallRunnable(Ball aBall, Component aComponent)
	                          {
	                                    ball = aBall;
	                                      component = aComponent;
	                                         }
	                    
	                      public void run()
	                             {
	                                       try
	                                                 {
	                                                          for (int i = 1; i <= STEPS; i++)
	                           &nb
 
 