- •Введение в Java-технологии
- •If (условие) {
- •Массивы и строки
- •Import имя.Пакета1.ИмяКласса1;
- •Import имя.Пакета2.ИмяКласса2;
- •Import имя.Пакета.*;
- •If ("женат".EqualsIgnoreCase(state) ||
- •If ("неженат".EqualsIgnoreCase(state) ||
- •Потоковый ввод-вывод
- •Коллекции
- •Графический пользовательский интерфейс
- •События
- •JavaСтандартная библиотека Java включает в себя набор классов, реализующих богатый набор средств для разработки графических приложений, включая
- •Совокупность данных средств принято называть Java2d.
- •Потоки исполнения
Коллекции
Простейшим средством для хранения и обработки нескольких однотипных объектов являются массивы.
Массивы мало пригодны для реализации алгоритмов обработки, при которых требуется менять их состав, т.е. добавлять или удалять их элементы.
В стандартной библиотеке языка Java имеется набор интерфейсов, абстрактных классов и их реализаций, обеспечивающих единый подход для хранения и обработки наборов объектов.
Совокупность данных средств принято называть Java Collections Frameworks или просто коллекции.
Некоторые классы и интерфейсы Java Collections Framework
Экземпляры коллекций могут содержать объекты любых ссылочных типов данных.
Классы, обладающие таким свойством, принято называть параметризованными.
При описании и создании переменных параметризованных классов требуется указывать конкретный тип данных, обработка которого будет осуществляться:
ИмяКласса<Тип> переменная;
переменная = new ИмяКласса<Тип>(...);
Пример 1. Создание стека целых чисел
Stack<Integer> stack;
stack = new Stack<Integer>();
Пример 2. Создание списка студентов
List<Student> students;
students = new ArrayList<Student>();
Пример 3. Создание множества точек
Set<Point> points;
points = new HashSet<Point>();
Интерфейс Iterable
Классы, реализующие этот интерфейс, предоставляют возможность последовательной обработки элементов коллекции с помощью цикла for :
for ( Тип объект : коллекция ) {
// обработка объекта
}
Пример. Вывод списка студентов на экран
for ( Student student : students ) {
System.out.println(student);
}
В общем случае порядок обработки элементов коллекции может не соответствовать порядку добавления элементов
Интерфейс Collection
Описывает общие методы по обработке элементов коллекции
int size() возвращает количество элементов коллекции;
boolean isEmpty() проверяет, содержит ли коллекция элементы (возвращает значение true, если коллекция пуста);
boolean contains(Object o) проверяет, принадлежит ли объект коллекции (возвращает значение true, если объект уже содержится в коллекции);
boolean add(E e) добавляет элемент в коллекцию;
boolean remove(Object o) удаляет из коллекции заданный объект (если, конечно, он содержится в коллекции);
Методы add и remove возвращают значение true, если в результате их выполнения состав коллекции изменился.
void clear() очищает коллекцию (удаляет из коллекции все содержащиеся в ней объекты);
Интерфейс List
Описывает списки – коллекции с фиксированным порядком размещения элементов.
Предполагается, что все элементы списков пронумерованы целыми числами от 0 до size()-1.
Методы интерфейса List позволяют обращаться к каждому элементу списка по индексу.
E get(int index) возвращает ссылку на элемент из указанной позиции;
int indexOf(Object o) возвращает индекс первого вхождения объекта;
int lastIndexOf(Object o) возвращает индекс последнего вхождения объекта;
В случае отсутствия объекта в списке методы indexOf(), lastIndexOf() возвращают значение –1.
void add(int index, E element) вставить объект в указанную позицию списка;
E remove(int index) удаляет объект из списка;
E set(int index, E element) заменяет объект с указанным индексом на новый.
Методы set(), remove() возвращают ссылку на удаленный/замененный объект.
Самыми используемыми реализациями интерфейса List являются классы ArrayList и Vector, которые можно использовать, например, как массивы с переменным количеством элементов.
Класс Stack, интерфейсы Queue и Deque
Класс Stack (стек), интерфейсы Queue (очередь) и Deque (двухстороння очередь) используются для описания списочных структур данных, которые позволяют обращаться к элементам, расположенных на краях списка.
Подобные структуры данных используются для реализации широкого круга алгоритмов.
Основные методы стека, очереди и дека
Стек |
Очередь |
Дек |
Описание метода |
void push(E e) |
|
void addFirst(E e) |
добавить элемент в начало списка |
E pop() |
E remove() E poll() |
E removeFirst() E pollFirst() |
извлечь первый элемент из списка |
E peek() |
E peek() E element() |
E getFirst() E peekFirst() |
получить ссылку на первый элемент |
|
void add(E e) |
void addLast(E e) |
добавить элемент в конец списка |
|
|
E removeLast() E pollLast() |
извлечь последний элемент из списка |
|
|
E getLast() E peekLast() |
получить ссылку на последний элемент |
Интерфейс Set
Интерфейс Set описывает множества.
Особенностью множеств является то, что все элементы в них различны. Для этого при добавлении объекта внутри метода add() выполняется проверка, присутствует ли во множестве элемент с таким значением.
Для сравнения объектов используются методы equals() и hashCode().
Чтобы обработка объектов пользовательских классов внутри множеств осуществлялась корректно, необходимо перегрузить эти методы.
Многие интегрированные среды разработки приложений позволяют генерировать эти методы автоматически на основе выбранных полей.
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Point other = (Point) obj;
if (this.x != other.x) {
return false;
}
if (this.y != other.y) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 11 * hash + (int) (Double.doubleToLongBits(this.x) ^
(Double.doubleToLongBits(this.x) >>> 32));
hash = 11 * hash + (int) (Double.doubleToLongBits(this.y) ^
(Double.doubleToLongBits(this.y) >>> 32));
return hash;
}
Для выполнения операций над отдельными элементами множеств могут использоваться методы
add() для добавления элемента в множество;
contains() для проверки принадлежности элемента множеству;
remove() для удаления элемента из множества
и т.д.
Для выполнения операций над двумя множествами могут использоваться методы
boolean addAll(Collection<E> c) добавляет в множество все элементы указанной коллекции (объединение множеств);
boolean removeAll(Collection<E> c) удаляет из множестве те элементы, которые принадлежат указанной коллекции (дополнение множеств);
boolean retainAll(Collection<E> c) оставляет в множестве те элементы, которые принадлежат указанной коллекции (пересечение множеств);