Архив метки: Программирование

Что такое TreeMap в Java?

Значение узла в дереве называется ключом. Бинарное дерево — это дерево, в котором каждый узел имеет не более двух дочерних элементов. Двоичное дерево поиска (BST) — это дерево, в котором для каждого узла правый дочерний элемент больше или равен левому дочернему элементу. Это приводит к тому, что правая половина дерева имеет значения, обычно превышающие значения левой половины на каждом уровне. Это означает, что бинарное дерево поиска частично отсортировано (тип неполной сортировки). BST можно хранить в структуре, подобной массиву, где корневой узел является первым значением.

Бинарное дерево может быть преобразовано в различные самобалансирующиеся деревья с различными наборами дополнительных условий, такие как дерево AVL и красно-черное дерево.

TreeMap в Java — это красно-черное дерево. Однако каждый узел состоит из ключа и соответствующего значения (пары ключ/значение), а не только из ключа. Каждая пара ключ/значение будет одним элементом в структуре, подобной массиву. В этой статье объясняется, как использовать TreeMap в Java, начиная с двоичного дерева поиска, за которым следует красно-черное дерево, а затем Java TreeMap.

 

Бинарное дерево поиска

Ниже приведен пример бинарного дерева поиска:

Бинарное дерево поиска

 

У каждого узла есть ключ. Ключ (значение) для корневого узла равен 8. Левый дочерний узел равен 3, а правый дочерний узел равен 10 (10 >= 3). Можно видеть, что для любого узла, имеющего двух дочерних элементов, правый дочерний элемент больше или равен левому дочернему элементу. Кроме того, правая половина дерева имеет значения, превышающие значения левой половины дерева для каждого уровня.

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

8, 3, 10, 1, 6, , , , 14, 4, 7, , , , , , , 13, ,

 

Обратите внимание, что массив (дерево) начинается с 8; опускается до 3, затем поднимается выше 8 в 10; снижается до 1, повышается до 6, затем имеет NIL до 14; снижается до 4; повышается до 7; снова NIL; затем 13 и последний NIL.

8 — это первое значение с индексом 0. Это корневой узел (корневой родитель). Это не обязательно самое большое значение среди всех значений. Его первый потомок (3) имеет индекс 1, индекс которого равен 2(0) + 1, где 0 — индекс родителя. Его второй потомок (10) имеет индекс 2, что равно 2(0) + 2, где 0 — индекс родителя.

3 находится в индексе 1. Это родитель. Его первый потомок (1) имеет индекс 3, что равно 2(1) + 1, где 1 — индекс родителя. Его второй потомок (6) имеет индекс 4, что равно 2(1) + 2, где 1 — индекс родителя.

6 находится в индексе 4. Это родитель. Его первый потомок (4) имеет индекс 9, что равно 2(4) + 1, где 4 — индекс родителя. Его второй потомок (7) имеет индекс 10, что равно 2(4) + 2, где 4 — индекс родителя.

10 находится в индексе 3. Это родитель. У него нет первого (левого) потомка, который должен был быть с индексом 7, что равно 2(3) + 1, где 3 — индекс родителя. Его второй потомок (14) имеет индекс 8, что равно 2(3) + 2, где 3 — индекс родителя.

14 находится в индексе 8. Это родитель. Его первый потомок (13) имеет индекс 17, что равно 2(8) + 1, где 8 — индекс родителя. У него нет правого (второго) потомка, который должен был быть с индексом 18, что равно 2(8) + 2, где 8 — индекс родителя.

В общем, поскольку подсчет индексов начинается с 0. Пусть я представляю индекс родителя массива; и поэтому левый (первый) потомок родителя с индексом i имеет индекс 2i + 1; а его правый (второй) дочерний элемент имеет индекс 2i + 2. Некоторые ячейки в массиве могут быть пустыми; они не должны иметь значений.

 

Красно-черное дерево

Красно-черное дерево — это сбалансированное бинарное дерево поиска. Ниже приведено уже сбалансированное красно-черное дерево:

Красно-черное дерево

 

Сбалансированное дерево – это дерево небольшой высоты. Позиции узлов изменены и отмечены красным и синим цветами, чтобы иметь наименьшую возможную высоту дерева в его развитии.

Используя формулы 2i + 1 и 2i + 2, значения можно поместить в структуру, подобную массиву, следующим образом:

13, 8, 17, 1, 11, 15, 25, , 6, , , , , 22, 27

 

Обратите внимание, что массив начинается с 13, опускается до 8 и затем повышается до 17. Затем он опускается за пределы 8 до 1, а затем повышается до 11, затем до 15, затем до 25; от которого идет NIL, а затем опускается до 6. Перед 22 и 27 следуют NIL.

Массив сбалансированного дерева, такой как красно-черное дерево выше, имеет меньше NIL, чем его соответствующее несбалансированное двоичное дерево поиска. Длина массива сбалансированного дерева короче, чем у соответствующего несбалансированного дерева.

Красно-черное дерево — это частично упорядоченное дерево.

 

Пары ключ/значение для Java TreeMap

Предыдущее красно-черное дерево имеет только ключи в качестве значений узлов. Каждому целочисленному ключу может быть присвоено соответствующее строковое значение. В следующем списке есть те же ключи с соответствующими значениями:

13/thirteen, 8/eight, 17/seventeen, 1/one, 11/eleven, 15/fifteen, 25/twenty-five, 6/six, 22/twenty-two, 27/twenty-seven

 

Это пары ключ/значение, подходящие для Java TreeMap. Каждому ключу будет сопоставлено соответствующее значение. Пара ключ/значение называется записью карты в Java. Для Java TreeMap расположение узлов осуществляется по ключам (а не по значениям пар ключ/значение). Каждый ключ сопоставляется со своим значением.

 

Создание карты Java TreeMap

В Java TreeMap — это класс в пакете java.util.*, который следует импортировать. Этот класс имеет четыре конструктора, и в этой статье проиллюстрированы два конструктора.

Публичная древовидная карта ()

Это создает пустой TreeMap. Следующий сегмент кода иллюстрирует это:

TreeMap<Integer,String> tm = new TreeMap<Integer,String>();



tm.put(13, "thirteen"); tm.put(8, "eight"); tm.put(17, "seventeen"); tm.put(1, "one");



tm.put(11, "eleven"); tm.put(15, "fifteen"); tm.put(25, "twenty-five"); tm.put(6, "six");



tm.put(22, "twenty-two"); tm.put(27, "twenty-seven");

 

Метод put() включает пары ключ/значение в TreeMap. После всего этого TreeMap становится сбалансированным внутри.

 

Public TreeMap (Map<? extends K,? extends V> m)

Этот метод конструктора создает карту из другой уже созданной карты, как в следующем фрагменте кода:

TreeMap<Integer,String> tm = new TreeMap<Integer,String>();



tm.put(13, "thirteen"); tm.put(8, "eight"); tm.put(17, "seventeen"); tm.put(1, "one");



tm.put(11, "eleven"); tm.put(15, "fifteen"); tm.put(25, "twenty-five"); tm.put(6, "six");



tm.put(22, "twenty-two"); tm.put(27, "twenty-seven");



TreeMap<Integer,String> tm1 = new TreeMap<Integer,String>(tm);

 

tm1 создается из tm. После всего этого оба TreeMaps внутренне сбалансированы; с первым сбалансированным первым. Балансировка происходит, поскольку ключи включают пары.

 

Методы карты дерева Java

Публичный V put (ключ K, значение V)

Строго говоря, метод put() не добавляет пару ключ/значение. Он связывает определенное значение с определенным ключом. Если ключ уже существовал в TreeMap с другим значением, значение заменяется новым. Этот метод возвращает старое значение или ноль, если старого значения не было. Применение этого метода было продемонстрировано выше.

 

Публичный размер()

Этот метод возвращает количество сопоставлений ключ/значение (пар) в TreeMap. Следующий фрагмент кода показывает, как его использовать:

int it = tm.size();



System.out.println(it);

 

Результат равен 10, что указывает на то, что в этом объекте TreeMap имеется 10 пар ключ/значение.

 

Public V get (ключ объекта)

Этот метод возвращает значение, соответствующее аргументу, который является ключом. Возвращает null, если ключ не существует. Следующий код иллюстрирует это для пары ключ/значение: 11/»eleven» и для ключа 40, которого не существует:

String val = tm.get(11); String str = tm.get(40);



System.out.print(val + ", "); System.out.print(str + " ");



System.out.println();

 

Результат:

eleven, null

Открытый набор<K>keySet()

Этот метод возвращает набор ключей, которые находятся в TreeMap. Для отображения ключей необходимо использовать итератор. Следующий сегмент кода для предыдущего TreeMap иллюстрирует это:

Set<Integer> st = tm.keySet();



Iterator<Integer> iter = st.iterator();



while (iter.hasNext()) {



System.out.print(iter.next() + ", ");



}



System.out.println();





Результат:

1, 6, 8, 11, 13, 15, 17, 22, 25, 27,

 

Возвращаемый список полностью отсортирован (по возрастанию), хотя TreeMap имеет частичную внутреннюю сортировку.

 

Значения Public Collection<V>()

Это возвращает представление коллекции (список) всех значений в TreeMap без ключей. Для отображения значений необходимо использовать итератор. Следующий сегмент кода для предыдущего TreeMap иллюстрирует это:

Collection<String> col = tm.values();



Iterator<String> iter = col.iterator();



while (iter.hasNext()) {



System.out.print(iter.next() + ", ");



}



System.out.println();





Результат:

one, six, eight, eleven, thirteen, fifteen, seventeen, twenty-two, twenty-five, twenty-seven,

 

Значения отображаются на основе их полных отсортированных ключей (по возрастанию), хотя TreeMap имеет внутреннюю частичную сортировку.

 

Открытый набор<Map.Entry<K,V>> entrySet()

Это возвращает набор пар ключ/значение. Чтобы отобразить ключи и соответствующие им значения, необходимо использовать итератор. Следующий сегмент кода для вышеприведенной TreeMap иллюстрирует это:

Set<Map.Entry<Integer,String>> pairs = tm.entrySet();



Iterator<Map.Entry<Integer,String>> iter = pairs.iterator();



while (iter.hasNext()) {



Map.Entry<Integer,String> etry = iter.next();



int in = etry.getKey(); String str = etry.getValue();



System.out.println(in + " => " + str);



}






Результат:

1 => one



6 => six



8 => eight



11 => eleven



13 => thirteen



15 => fifteen



17 => seventeen



22 => twenty-two



25 => twenty-five



27 => twenty-seven

 

Пары были отображены на основе их полных отсортированных ключей (по возрастанию), хотя TreeMap имеет внутреннюю частичную сортировку.

 

Вывод

В Java TreeMap — это красно-черное дерево, которое является самобалансирующимся двоичным деревом поиска. В этой статье обсуждались часто используемые методы и конструкция Java TreeMap. Мы надеемся, что вы нашли эту информацию полезной.руководств.



2022-02-12T22:14:55
Java

Рекурсия в Java

Рекурсия в Java — это вызов метода методом внутри метода. Это действие повторяется до тех пор, пока не будет выполнено условие. Метод должен быть методом в классе, отличном от метода в основном классе. Основной класс — это класс, который имеет метод main(). Имя файла Java совпадает с именем основного класса. Статический метод в основном классе все еще можно сделать рекурсивным, но в этой статье это не рассматривается. В этой статье объясняется рекурсия в Java с тремя хорошими примерами.

 

Подсчет целых чисел от нуля

Рассмотрим файл Java с двумя классами: закрытый класс следующим образом:

class AClass {

        void mthd (int no) {

System.out.print(no); System.out.print(' ');

            no = no + 1;

            if (no < 5)

mthd(no);

        }

    }

 

Метод, который будет вызывать сам себя, mthd(). Он имеет параметр «int no». Метод находится в классе AClass. Этот метод считает от 0 до 4. Первая строка метода содержит два утверждения. Первый печатает параметр no. Второй печатает пробел справа от напечатанного параметра. В следующей строке к номеру добавляется 1. Следующая строка представляет собой составной оператор if. Есть условие, которое должно быть выполнено. Условие, которое должно быть выполнено, это когда no достигает 5. Если 5 не достигнуто, «mthd(no);» называет себя без добавления 1 к нему.

Основным классом для этого метода может быть,

public class TheClass {

        public static void main(String[] args) {

            int num = 0;

AClass obj = new AClass();

obj.mthd(num);

System.out.println();

        }

    }

 

Первый оператор в методе main() объявляет целое число, num присваивая ему ноль. Для вызова метода объект должен быть создан из своего класса. Следующий оператор в методе main() создает экземпляр объекта obj из AClass. Оператор after использует этот объект для вызова метода mthd(), передавая ему аргумент num, равный 0. Это начало отсчета. Последний оператор в методе main() печатает новую строку после того, как весь результат был напечатан. Результат:

0 1 2 3 4

 

Рекурсивный метод mthd() вызывается в первый раз из метода main(). После этого он продолжает вызывать себя, пока не будет выполнено условие.

Такой подсчет можно сделать для любого диапазона. Чтобы достичь этого для любого диапазона, начальный номер диапазона должен быть присвоен num. Вместо 5 для условия if в методе следует ввести число сразу после диапазона.

 

Добавление диапазона непрерывных заданных чисел

Рассмотрим цифры:

102030405060

 

Сумма первых 4-х чисел равна 100. То есть: 10+20=30; 30 + 30 = 60; и 60 + 40 = 100. Рекурсивный метод может состоять в добавлении этих чисел к возрастающей сумме до тех пор, пока сумма не станет меньше или равной 100. Чтобы сложить первые пять чисел, рекурсивный метод может состоять в добавлении чисел к возрастающей сумме. sum до тех пор, пока сумма не станет меньше или равна 150.

Стратегия состоит в том, чтобы иметь все эти числа в массиве в методе main(). Затем передайте массив в качестве аргумента рекурсивному методу. Если требуется сложение первых четырех чисел, то при достижении суммы 100 рекурсивный метод должен перестать вызывать себя. Если требуется сложение первых пяти чисел, то при достижении суммы 150 рекурсивный метод должен перестать вызывать себя. Если требуется сложение первых шести чисел, то при достижении суммы 210 рекурсивный метод должен перестать вызывать себя.

Класс для этого рекурсивного метода может быть:

    class AClass {

        int sum = 0, i = 0;

        void mthd (int[] arry) {

            sum = sum + arry[i];= i + 1;

            if (sum < 100)

mthd(arry);

        }

    }

 

Это для сложения первых четырех чисел. В классе есть два поля: sum и i. i предназначен для перебора массива, начиная с индекса 0. Первый оператор рекурсивного метода, mthd(), добавляет следующее число к сумме, которая изначально равна нулю. Следующий оператор увеличивает i на 1 для следующего индекса массива следующего вызова. Оператор после является составным оператором if. Условие здесь — сумма не должна быть выше 100. Итак, при каждом вызове того, что сумма не до 100 (или выше), метод вызывается снова, передавая тот же массив. В этой ситуации условие находится в конце реализации метода.

Класс main() для этого может быть:

public class TheClass {

        public static void main(String[] args) {

int[] arr = new int[]{102030405060};

AClass obj = new AClass();

obj.mthd(arr);

System.out.println(obj.sum);

        }

    }

 

Первый оператор в методе main() создает экземпляр массива с его элементами. Второй оператор создает экземпляр объекта для AClass. Оператор после вызывает рекурсивный метод, передавая массив в качестве аргумента. Это первый вызов рекурсивного метода. После этого метод будет вызывать сам себя до тех пор, пока не будет достигнута необходимая сумма. Последний оператор печатает окончательную сумму. Выход для этого случая равен 100.

Факториал

Факториал 0, записанный как 0!, равен 1. Факториалы 5, 4, 3, 2, 1 следующие:

Factorial of 5 = 5 X 4 X 3 X 2 X 1 X 0! = 120



Factorial of 4 = 4 X 3 X 2 X 1 X 0! = 24



Factorial of 3 = 3 X 2 X 1 X 0! = 6



Factorial of 2 = 2 X 1 X 0! = 2



Factorial of 1 = 1 X 0! = 1

 

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

Класс для рекурсивного метода может быть:

    class AClass {

        int mthd (int no) {

          if (no == 1)      

            return 1;

          else      

return(no * mthd(no-1));    

        }

    }

 

Все тело метода представляет собой составное условие if. Если число, факториал которого необходим, равно 1, то будет возвращено 1, так как факториал 1 равен 1. Если число больше 1, то все умножения должны быть выполнены, начиная с самого числа, уменьшившись на 1 единицу.

Результат получается, когда все умножение сделано. Возвращаемое выражение здесь является вызовом метода. Его аргумент является произведением числа и рекурсивного метода.

Предположим, что число, факториал которого нужен, равно 5, тогда аргумент первого обратного вызова будет:

5 X mthd(4)

 

Это выражение будет зарезервировано в памяти, и следующий вызов будет

5 X 4 X mthd(3)

 

Это выражение будет зарезервировано в памяти, и следующий вызов будет

5 X 4 X 3 X mthd(2)

 

Это выражение будет зарезервировано в памяти, и следующий вызов будет

5 X 4 X 3 X 2 X mthd(1)

 

Теперь mthd(1) возвращает 1 из-за оператора if-part «if (no == 1) return 1;», в результате чего

5 х 4 х 3 х 2 х 120

 

для окончательного возвращаемого значения.

Основным классом для этого может быть:

public class TheClass {

        public static void main(String[] args) {

AClass obj = new AClass();

            int ret = obj.mthd(5);

System.out.println(ret);

        }

    }

 

С аргументом 5 для первого вызова в методе main() окончательное возвращаемое значение равно 120.

 

Вывод

Рекурсия в Java — это вызов метода методом внутри метода. Это действие повторяется до тех пор, пока не будет выполнено условие.



2022-02-09T22:41:39
Java

Как обрезать строку в Java

Обрезка — это процесс манипулирования строкой, который используется для того, чтобы сделать вашу строку более четкой и лаконичной за счет удаления из нее ненужных частей. Метод обрезки в Java позволяет нам обрезать лишние пробелы в начале и в конце строки. В этой статье мы предоставим вам подробное руководство о том, как можно обрезать строку с помощью языка программирования Java.

 

Как обрезать лишние пробелы из строки с помощью Java

Мы инициализируем публичный класс, в котором будет написан весь код, как показано ниже:

public class StringTrim {

………

}

 

Для этого примера в основной функции мы определили некоторый текст в java с некоторыми дополнительными пробелами, которые мы собираемся обрезать в более позднем коде.

String str1 ="        Эта строка содержит дополнительные пробелы.       ";

 

Если вы хотите найти общую длину строки, вы можете сделать это, набрав:

int n=str1.length();

 

Теперь мы собираемся отобразить строку вместе с ее длиной, как показано ниже.

System.out.println("Строка: "+ str1);

System.out.println("Длина: "+ n);

 

В Java есть встроенная функция trim(), которую можно использовать для обрезки ненужного пробела в строке, и для нашего кода мы можем использовать ее, набрав:

String str2=str1.trim();

n=str2.length();

 

В приведенном выше коде строка хранится в переменной «str1», поэтому мы собираемся обрезать ее, набрав str1.trim(), а затем сохранив результат в новой переменной «str2» . Теперь, после обрезки, мы также собираемся найти новую длину строки, и для этого мы использовали функцию str2.length() и сохраняем результат внутри переменной «n» . После этого мы также собираемся отобразить новый результат на экране с помощью функции System.out.println() :

System.out.println("После обрезки, строка: "+ str2 );

System.out.println("Длина обрезанной строки: "+ n);

 

Полный код:

public class StringTrim {

    public static void main(String[] args) {

        System.out.println("Пример обрезки строки n");

        //Объявить строку

        String str1 ="        Эта строка содержит дополнительные пробелы.       ";

        int n=str1.length();    //Эта строка возвращает длину строки в переменную n

        System.out.println("Строка: "+ str1);

        System.out.println("Длина: "+ n);

        String str2=str1.trim();

        n=str2.length();

        System.out.println("После обрезки, строка: "+ str2 );

        System.out.println("Длина обрезанной строки: "+ n);

        //Все пробелы, такие как пробел, символ новой строки (n), tab (t)

        //которые присутствуют в начале или в конце строки, удаляются.

    }  

}

 

Терминал в операционной системе Linux обеспечивает простейший способ реализации и выполнения кода с использованием языка программирования Java. Во-первых, вам нужно создать java-файл с помощью терминала, набрав:

$ nano StringTrim.java

 

Следующим шагом является написание и сохранение кода в файле Java.

Примечание. Вам необходимо установить приложение комплекта разработки Java (JDK) для выполнения программ на основе Java, набрав:

$ sudo apt install default-jdk

 

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

$ javac StringTrim.java

$ java StringTrim

Вывод

Обрезка строки — это встроенная функция, доступная в библиотеке Java, используемая для удаления лишнего пробела из строки. Чтобы сделать строки более четкими и краткими, вы можете использовать встроенную функцию Java с именем trim(), которую мы объяснили в этой статье. Эта статья представляет собой подробное руководство по использованию функции Java Trim() для изменения строк.



2022-02-09T22:36:20
Java

Архитектура JVM (виртуальная машина Java) | Объяснение

JVM — это абстрактная машина, которая используется для выполнения программ Java. В Java исходный код преобразуется в байт-код, который после дальнейшего преобразования в машинный код передается в память виртуальной машиной Java. Короче говоря, JVM предоставляет среду выполнения для выполнения байт-кода Java, что делает его компонентом среды выполнения Java (JRE). В целом, JVM отвечает за загрузку, связывание и инициализацию.

 

JVM-архитектура

Внутренняя архитектура виртуальной машины Java состоит из трех основных частей.

  1. Загрузчик классов
  2. Область памяти
  3. Исполнительный механизм

 

Вот визуальное представление архитектуры JVM.

JVM-архитектура

 

Ниже подробно описаны все части виртуальной машины Java.

 

1. Загрузчик классов

Загрузчик классов в JVM относится к подсистеме, отвечающей за загрузку файлов. Он загружает Java-программу каждый раз, когда мы запускаем Java-программу. Java предоставляет следующие загрузчики классов.

а. Bootstrap ClassLoader

Суперкласс Extension ClassLoader, отвечающий за загрузку файла rt.jar.

б. Extension ClassLoader

Дочерний элемент Bootstrap Classloader и родитель System/Application ClassLoader, расширение classloader загружает JAR-файлы, которые сохраняются в каталоге.

в. Система/приложение ClassLoader

Этот загрузчик классов загружает файлы классов из пути к классам и является дочерним элементом Extension ClassLoader.

 

2. Область памяти

Область памяти JVM состоит из следующих частей.

а. Область метода

Область методов предназначена для сохранения структуры классов, таких как данные метода или данные поля, пул среды выполнения и код для методов.

б. куча

Куча — это область данных времени выполнения, в которой размещаются объекты .

в. Стеки

Стек отвечает за хранение кадров, локальных переменных и частичных результатов. Он играет важную роль в вызове метода и возврате метода. Каждый раз, когда создается поток, одновременно создается частный стек JVM для этого конкретного потока, и каждый раз при вызове метода создается новый фрейм, и как только вызов завершается, фрейм уничтожается.

д. Регистры ПК

Он отвечает за хранение адресов во время выполнения инструкций JVM.

е. Стеки нативных методов

Он отвечает за хранение всех собственных методов, необходимых в приложении.

 

3. Исполнительный механизм

Исполнительный механизм состоит из следующего.

а. Устный переводчик

Он выполняет инструкции после чтения потока байт-кода.

б. Компилятор Just-in-time (JIT)

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

c.Сборщик мусора

Он используется для сбора объектов, на которые нет ссылок, и их удаления для освобождения памяти.

 

Собственный интерфейс метода

Он помогает взаимодействовать с приложениями, написанными на разных языках, таких как C, C++ и т. д. Он также отвечает за помощь коду Java, работающему в JVM, для вызова библиотек и собственных приложений.

 

Библиотеки методов

Он состоит из собственных библиотек (C, C++), необходимых для Execution Engine.

 

Вывод

Виртуальная машина Java (JVM) — это абстрактная машина, созданная для выполнения программ Java. Архитектура JVM состоит из трех основных частей: загрузчика классов, области памяти и механизма выполнения. Область памяти и исполнительный механизм также состоят из некоторых частей, которые имеют разные функциональные возможности. В этом руководстве объясняется архитектура виртуальной машины Java (JVM) с выделением функций ее различных компонентов.



2022-02-09T22:25:38
Java

С++ против Java

C++ и Java — популярные языки программирования, используемые разработчиками и программистами. У каждого из этих языков есть свои преимущества и недостатки, но прежде чем мы начнем исследовать принципиальные различия между вышеупомянутыми языками программирования, давайте сначала установим наше общее представление об этих двух языках.

 

Что такое С++?

C++ — это язык программирования среднего уровня, который включает почти все возможности языка C. Первоначально он был разработан Бьярном Страуструпом как расширение C. Последняя версия C++ была выпущена в 2020 году. Он считается частично объектно-ориентированным языком, поскольку сочетает в себе функции C и Simula67, который был первым объектно-ориентированным языком программированием.

 

Что такое Java?

Java — это язык программирования, вдохновленный C и C++. Он был создан в 1995 году командой Green Team, работающей в Sun Microsystems. Первоначально он назывался «Oak», но позже был изменен на Java. Это чисто объектно-ориентированный язык программирования, который обеспечивает независимость от платформы и предоставляет интегрированную среду разработки (IDE).

 

Ключевые различия между C++ и Java

Ниже мы предоставили таблицу, в которой сравниваются C++ и Java на основе определенных критериев.



















старший нетКритерииС++Java
1.ОснованБьерн Страуструп в лабораториях AT&T Bell в 1985 году.Джеймс Гослинг в Sun Microsystems в 1995 году.
2.Объектно-ориентированное программирование C++ представил концепцию классов и объектов, однако большинство его программ можно писать без методов ООП. Поэтому его нельзя рассматривать как чисто объектно-ориентированный язык.Java считается чисто объектно-ориентированным языком.
3.Независимость от платформы C++ — это платформозависимый язык, который необходимо компилировать отдельно для каждой платформы.Java — полностью независимый от платформы язык. Код, написанный на Java, является гибким и может быть перенесен с одного устройства на другое.
4.Интегрированная среда разработки (IDE)С++ не поддерживает IDE.Java поддерживает IDE. Он предоставляет известные платформы, такие как Eclipse, NetBeans IDE.
5.использованиеC++ используется для разработки системных программ.Java используется для создания приложений для Android, веб-приложений и научных приложений.
6.Компилятор и интерпретаторC++ — это только компилируемый язык.Java является компилируемым, а также интегрированным языком.
7.Управление памятьюУправление памятью в C++ осуществляется вручную и находится в руках программиста.Управление памятью Java контролируется системой.
8.Поддерживаемые функцииC++ поддерживает такие функции, как операторы goto, перегрузка операторов, указатели, структуры, объединения и т. д.Java не поддерживает такие функции, как операторы goto, операторы, перегрузки, указатели, структуры, объединения и т. д.
9.БиблиотекиC++ имеет очень ограниченное количество библиотек.Java имеет широкий спектр библиотек.
10.Комментарий к документацииC++ не поддерживает комментарии к документации.В Java есть поддержка комментариев к документации.
11.Межъязыковая совместимостьПоскольку C++ был расширением C, он совместим с C и большинством других языков.Java не совместим ни с одним другим языком.
12.Обнаружение ошибокВ C++ обнаружение ошибок во время выполнения выполняется вручную.В Java обнаружение ошибок во время выполнения выполняется системой автоматически.
13.Данные и функцииC++ имеет глобальную область видимости, что означает, что данные и функции могут быть размещены вне класса.Java не имеет глобальной области видимости, поэтому данные и функции должны существовать в классе.
14.Аппаратная близостьC++ довольно близок к аппаратному обеспечению. По этой причине он используется в основном для системного программирования или разработки игровых приложений и компиляторов.Поскольку Java предназначена для разработки программных приложений, поэтому она не близка к аппаратному обеспечению.
15.Передача параметровC++ поддерживает передачу параметров по значению и ссылке.Java также поддерживает передачу параметров по значению и ссылке.

 

Вывод

C++ и Java — два языка программирования, у которых есть свои плюсы и минусы. В то время как C++ лучше всего подходит для системного программирования и разработки игр и компиляторов, Java идеально подходит для приложений Android и веб-приложений. Объявление одного лучше по сравнению с другим было бы неоправданным. Это полностью зависит от потребностей программного обеспечения, которое вы создаете. Язык, который идеально соответствует вашим требованиям, является лучшим для вас!



2022-02-08T16:12:13
Java

Особенности Java

Java — это хорошо известный высокоуровневый серверный/внутренний язык программирования, основанный на классах, который легко изучить и понять. Он используется в распределенной среде в Интернете. Идея Java была основана на создании безопасного, простого в использовании и переносимого языка программирования. В этой статье будет представлен подробный обзор возможностей Java. Итак, начнем!

 

Особенности Java

Java широко используется из-за его основных функций, перечисленных ниже:

 

Объектно-ориентированный

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

 

Скомпилировано и интерпретировано

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

Особенности Java

 

Java-программа выполняется в два этапа. На первом этапе компилятор компилирует код Java и генерирует байт-код, а на втором этапе интерпретатор преобразует байт-код в машинный код с помощью JVM. Таким образом, Java использовал силу и устойчивость как компилируемых, так и интерпретируемых языков.

 

Независимый от платформы и портативный

Java-программа не зависит от платформы, что означает, что после компиляции Java-программа может работать в любой операционной системе, такой как Linux, Windows или macOS. И, следовательно, это увеличивает переносимость Java.

Независимая от платформы функция связана с компилируемой и интерпретируемой функцией. Java реализует функцию независимости от платформы благодаря байтовому коду. Байт-код интерпретируется с помощью виртуальной машины Java (JVM), после чего он может работать на любой машине, такой как Windows, Linux и т. д.

 

Распределенный

Распределенная функция определяет, что программа Java может легко работать в сети. Это означает, что в Java-программировании пользователи могут разрабатывать распределенное программное обеспечение/приложения, которые могут легко работать в сети. Для этой цели java использует пакет java.net, который способен выполнять различные функции, связанные с сетью, такие как URL-соединение, связь по протоколам и т. д.

 

Многопоточный

Java предлагает функцию многопоточности, которая позволяет одновременно выполнять несколько частей (потоков) программы. Многопоточность запускает эти программы одновременно в определенной последовательности и своевременно. Многопоточность улучшает использование ЦП, пропускную способность, связь между процессами и т. д.

 

Динамический

Java предоставляет возможность динамического добавления новых классов или методов в программу. Он может загружать/связывать библиотеки, классы, объекты и т. д. во время выполнения. Более того, Java может использовать методы, написанные на любом компьютерном языке, и эти методы известны как нативные методы.

 

Надежный и безопасный

Java обеспечивает надежность, поскольку может обрабатывать исключения, ошибки времени выполнения и т. д. Говорят, что это надежный язык из-за мощной функции управления памятью. И он считается безопасным языком программирования, поскольку не поддерживает концепцию указателей. Более того, JVM играет очень важную роль с точки зрения безопасности, поскольку гарантирует, что никакая небезопасная программа не будет запущена.

 

Простой

Синтаксис Java прост и удобен для изучения. Поэтому тот, у кого нет опыта использования какого-либо языка программирования, также может изучить язык java. Он считается простым языком программирования, поскольку в нем отсутствуют сложные функции, такие как явные указатели, перегрузка операторов и т. д.

 

Влияние/важность Java

Java оказала большое влияние на ИТ-индустрию благодаря своим потрясающим функциям и превосходным продуктам. И он широко используется различными известными компаниями:

  • Google имеет огромный процент своих разработок на Java.
  • Netflix, Amazon и многие другие известные компании являются пользователями Java.
  • Accenture, очень известная американская компания, использует Java для большинства своих клиентов.
  • Компании-производители аппаратного обеспечения, такие как Intel, Philips и т. д., также являются пользователями Java.
  • Java считается официальным языком разработки для Android.

Java стал наиболее популярным языком благодаря своему выдающемуся вкладу в ИТ-индустрию.

 

Вывод

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

Еще одной важной особенностью языка программирования Java является его переносимость и независимость от платформы. В этой статье были рассмотрены некоторые важные особенности, раскрывающие важность языка программирования Java.



2022-02-05T18:35:35
Java