kakak5.java
Author: KazazaevCreated Jun 4, 2026Updated Jun 4, 2026
import java.util.ArrayList;
// ВАРИАНТ 1
class Person implements Comparable { String name; // Поле для хранения имени int age; // Поле для хранения возраста
Person(String name, int age) {
this.name = name; // Сохраняем переданное имя в поле объекта
this.age = age; // Сохраняем переданный возраст в поле объекта
}
@Override
public int compareTo(Person p) {
return this.age - p.age; // Возвращает разницу возрастов (отрицательно, 0 или положительно)
}
// Метод toString - возвращает строковое представление объекта
@Override
public String toString() {
return name + "(" + age + ")"; // Пример: "Анна(25)"
}
}
// Класс с утилитарным методом для поиска максимума и минимума class ArrayUtils {
// Статический метод - вызывается без создания объекта
// Принимает массив Comparable объектов, возвращает массив из max и min
public static Comparable[] maxAndMin(Comparable[] array) {
// Если в массиве меньше 2 элементов - выбрасываем исключение
if (array.length < 2) throw new IllegalArgumentException("меньше 2 элементов");
Comparable max = array[0];
Comparable min = array[0];
// Цикл начинается с индекса 1
for (int i = 1; i < array.length; i++) {
// Если текущий элемент больше max
// compareTo > 0 значит array[i] больше max
if (array[i].compareTo(max) > 0)
max = array[i]; // Обновляем максимум
// Если текущий элемент меньше min
// compareTo < 0 значит array[i] меньше min
if (array[i].compareTo(min) < 0)
min = array[i];
}
// Возвращаем новый массив из двух элементов [max, min]
return new Comparable[]{max, min};
}
}
// ВАРИАНТ 2
// Класс стека, реализует интерфейс Cloneable (разрешает клонирование) class MyStack implements Cloneable {
// Приватное поле - ArrayList для хранения элементов стека
private ArrayList<Object> list = new ArrayList<>();
// Метод push - добавляет элемент на вершину стека
public void push(Object o) {
list.add(o);
}
// Метод pop - удаляет и возвращает верхний элемент стека
public Object pop() {
return list.remove(list.size()-1); // Удаляем последний элемент и возвращаем его
}
// Метод clone - создаёт копию объекта
@Override
public Object clone() {
try {
MyStack c = (MyStack) super.clone(); // super.clone() создаёт поверхностную копию
c.list = (ArrayList<Object>) list.clone();
return c; // Возвращаем готовую глубокую копию стека
} catch (CloneNotSupportedException e) { // Ловим исключение (никогда не произойдёт)
return null; // В случае ошибки возвращаем null
}
}
// Метод toString - возвращает строковое представление стека
@Override
public String toString() {
return list.toString(); // Вызываем toString у ArrayList
}
}
// ГЛАВНЫЙ КЛАСС
public class Main {
public static void main(String[] args) {
// ===== ВАРИАНТ 1 =====
System.out.println(" ВАРИАНТ 1");
// Создаём массив чисел (Integer автоматически реализует Comparable)
Comparable[] nums = {5, 2, 8, 1, 9, 3};
// Вызываем метод maxAndMin, получаем массив [max, min]
Comparable[] res = ArrayUtils.maxAndMin(nums);
// Выводим результат - максимум (индекс 0) и минимум (индекс 1)
System.out.println("Числа: max=" + res[0] + ", min=" + res[1]);
// Создаём массив строк (String реализует Comparable)
Comparable[] strs = {"яблоко","груша","апельсин","банан"};
// Вызываем метод maxAndMin для строк
res = ArrayUtils.maxAndMin(strs);
// Выводим результат (строки сортируются по алфавиту)
System.out.println("Строки: max=" + res[0] + ", min=" + res[1]);
// Создаём массив объектов Person
Person[] people = {new Person("Анна",25), new Person("Иван",30), new Person("Мария",20)};
// Вызываем метод maxAndMin для Person (сравниваются по возрасту)
res = ArrayUtils.maxAndMin(people);
// Выводим результат (старший по возрасту и младший)
System.out.println("Person: max=" + res[0] + ", min=" + res[1]);
// ВАРИАНТ 2
System.out.println("\n=== ВАРИАНТ 2 ===");
// Создаём первый стек
MyStack s1 = new MyStack();
// Добавляем элементы в стек (1, 2, 3)
s1.push(1);
s1.push(2);
s1.push(3);
// Клонируем стек - создаём глубокую копию
MyStack s2 = (MyStack) s1.clone(); // (MyStack) - приведение типа
// Изменяем оригинальный стек: удаляем верхний элемент (3)
s1.pop(); // pop() возвращает 3, но мы его не сохраняем
s1.push(999); // Добавляем 999 на вершину
// Выводим оригинал - [1, 2, 999]
System.out.println("Оригинал: " + s1);
// Выводим клон - [1, 2, 3] (не изменился!)
System.out.println("Клон: " + s2);
// Подтверждаем, что клон независим
System.out.println("Клон независим ");
}
}
Source: AlessandroZ/LaZagne